私はたくさんのブログを見て、SwiftユニットテストをXcode6.0.1(または6.1)で動作させるために多くのことを試みました)。私のアプリのターゲットなので、私はこの行を書きました:
var vc: LoginViewController!
もちろん、「宣言されていないタイプの使用 'LoginViewController'」エラーが発生します。
次に、テストターゲットにLoginViewController
を追加しようとしましたが、プロジェクト内の他のクラスで「未解決の識別子の使用」エラーが発生します。そのため、これらのクラスをテストターゲットに追加しようとしましたが、下のスクリーンショットのように、一見無限のエラーの原因になってしまいます。
私のすべてのクラスをパブリックとして宣言すると、他のエラーが発生し、悪い習慣のように見えます。とにかく、多くのフレームワークとクラスに依存するSwiftプロジェクトにユニットテストを含めることはありますか?私は単にこの 記事 のコードとほぼ同じものから始めたいと思います。
多くの頭痛の種とこれを後回しにした後、主な問題はテストターゲットメンバーシップにファイルを追加するときに、Objective-Cクラスがまだ文句を言うことであることがわかりました。新しい方法との古い互換性の問題だと思いましたSwiftユニットテストを行いますが、解決策は私のテストターゲットはブリッジがあることを知りませんでしたheader。したがって、次のように、テストターゲットのビルド設定にその参照を追加しました。
今では単純で明白に見えますが、エラーは役に立ちませんでした。 Swiftユニットテストでこれが問題になる可能性があることを示唆した他の解決策はありませんでしたが、今ではわかっています。
Tl; dr
単体テストがSwiftで機能するためには、テストターゲットがアプリターゲットが知っていることをすべて知っている必要があるため、テストターゲットのブリッジヘッダーへの参照も追加します(該当する場合)。
Xcode 7を使用している場合は、@testable import {ModuleName}
を使用してこれを処理するためのはるかに優れた方法があります。
テストするモジュールのビルド設定Enable Testability
がYES
に設定されていることを確認してください。
Xcode6.1を使用しています
Swiftファイルをテストターゲットのtarget membership
に追加する必要があります