Swift で書いた Class の Unit Test を書こうとした時にハマったのでメモ
Objective-C での Unit Test
テスト対象のクラスがあり、
Allow testing Host Application APIs
に✔して(デフォルトで✔されている)
普通にテストを書いて実行すればよかった。
Swift での Unit Test
何も考えずにテストを実行すると、テスト対象クラスが見つからず、Use of unresolve identifier 'LogicA'
というコンパイルエラーが出る。
Allow testing Host Application APIs
に✔していても関係ない。
Swift1.2 以前
テスト対象ファイルの File Inspector でちまちま ${PROJECT_NAME}Tests に✔していくか、
「Build Setting > Compile Sources 」から複数ファイルを一気に ${PROJECT_NAME}Tests に含めるか
しかなかった。
でもこの方法だと、特に既存機能のテストを書いていこうとした場合に、
あるファイルの Target に ${PROJECT_NAME}Tests を追加するとその依存する別のファイルが芋づる式に必用になり非常にだるかった。
Swift2 で追加された @testable
「Build Settings > Enable Testability」をYES
にして
@testable import ${PROJECT_NAME}
すると、${PROJECT_NAME}Tests をターゲットに追加しなくてもテストが可能になる。
参考URL