テストを実行するとこういうエラーがでることがあると思います。
Use of undeclared type 'Todo'
does not have a member named 'todo'
import XCTest import TodoApp class TodoTests: XCTestCase { var todo: Todo! override func setUp() { super.setUp() todo = Todo() }
たまに解決方法として全部publicにするとかいうのを見かけるのですが、それは間違いです。もしそうだとするとpublicなクラスしかテストできないってことになるので普通に考えたら明らかにおかしいですよね。。
ここから解決方法です。
方法その1
Swift1.x系での対処方法です。Swift2.x系でも使えます。
問題は、Test Targetの設定にあります。 ProjectのUnitTest用のTargetを選択し、Build Phasesのタブを選択します。
エラーがでる場合は、Compile Sourcesにテスト対象のクラスが追加されていないと思われます。
そこでこのようにテスト対象のクラスを追加してやればエラーは消えるはずです。
クラスをプロジェクトに追加される際に、どのTargetに対して追加するか聞かれるダイアログがでると思いますが、その際にテストTargetも対象にいれるのを忘れないように気をつけるとこういったことは防げます。
方法その2
Swift2.xから使える方法です。
importの前に@testableをつければよいです。
import XCTest @testable import TodoApp
RealmなどTestTargetでテスト対象のクラス一緒にコンパイルできない場合はこの方法でやるしかないです。