web-dev-qa-db-ja.com

Swiftファイルをテストターゲットに追加し、単体テストを修正しない

私はたくさんのブログを見て、SwiftユニットテストをXcode6.0.1(または6.1)で動作させるために多くのことを試みました)。私のアプリのターゲットなので、私はこの行を書きました:

var vc: LoginViewController!

もちろん、「宣言されていないタイプの使用 'LoginViewController'」エラーが発生します。

次に、テストターゲットにLoginViewControllerを追加しようとしましたが、プロジェクト内の他のクラスで「未解決の識別子の使用」エラーが発生します。そのため、これらのクラスをテストターゲットに追加しようとしましたが、下のスクリーンショットのように、一見無限のエラーの原因になってしまいます。

xcode Swift errors

私のすべてのクラスをパブリックとして宣言すると、他のエラーが発生し、悪い習慣のように見えます。とにかく、多くのフレームワークとクラスに依存するSwiftプロジェクトにユニットテストを含めることはありますか?私は単にこの 記事 のコードとほぼ同じものから始めたいと思います。

22
tfrank377

多くの頭痛の種とこれを後回しにした後、主な問題はテストターゲットメンバーシップにファイルを追加するときに、Objective-Cクラスがまだ文句を言うことであることがわかりました。新しい方法との古い互換性の問題だと思いましたSwiftユニットテストを行いますが、解決策は私のテストターゲットはブリッジがあることを知りませんでしたheader。したがって、次のように、テストターゲットのビルド設定にその参照を追加しました。

test target bridging header

今では単純で明白に見えますが、エラーは役に立ちませんでした。 Swiftユニットテストでこれが問題になる可能性があることを示唆した他の解決策はありませんでしたが、今ではわかっています。

Tl; dr

単体テストがSwiftで機能するためには、テストターゲットがアプリターゲットが知っていることをすべて知っている必要があるため、テストターゲットのブリッジヘッダーへの参照も追加します(該当する場合)。

38
tfrank377

Xcode 7を使用している場合は、@testable import {ModuleName}を使用してこれを処理するためのはるかに優れた方法があります。

テストするモジュールのビルド設定Enable TestabilityYESに設定されていることを確認してください。

14
hwaxxer

Xcode6.1を使用しています

Swiftファイルをテストターゲットのtarget membershipに追加する必要があります

enter image description here

14
Anthony Kong