Xcode
iOS
unittest
Swift
AppExtension

App ExtensionのUnitTestを書く

はじめに

App Extensionの一つであるToday ExtensionのUnitTestを書こうとしてハマったので解決策を記載します。

App ExtensionのUnitTest

まずなにもせずにApp ExtensionのUnitTestを書こうとすると様々なエラーが出てテストコードのBuildが通りませんでした。
UnitTestではテストを実行するHostApplicationをTARGETS>General>Testingから設定しますが、そもそもプルダウンの選択肢にはApp Extensionは表示されません。
しかし以下の方法でUnitTestを実行することができました。

1.新規UnitTestのTargetを作成する

App本体のUnitTestのTargetとは別に新規で作成してください。
その際に、新規作成Target>General>TestingのHost ApplicationをNoneに設定します。
スクリーンショット 2017-11-08 0.08.24.png

2.UnitTestから参照するファイルのTarget MembershipにUnitTestのTargetを追加する

スクリーンショット 2017-11-09 0.43.26.png
上記画像ではTodayViewControllerをテストするUnitTestを書く場合となります。
通常ではTarget MembershipではTodayExtensionにのみチェックが付いています。
そこに新たにTodayExtensionUnitTestにもチェックをつけています。

おわりに

以上で手順としては完了になります。
あとはAppExtension用に作成したUnitTestのTargetで通常通りにUnitTestを書いて実行できるかと思います。

最初は@testable import TodayExtensionだけ書けばいけるかな〜と思っていたのですがエラーが出てダメでした…