web-dev-qa-db-ja.com

メインSwiftクラスをテストターゲットにインポートできませんか?

IOSアプリでクラスをテストしようとしています。 import Pickleテストファイルの先頭にPickleTests.Swiftを追加して、すべてのクラスを含むターゲットPickleをテストターゲットPickleTestsにインポートしようとしています。 、しかしエラーが出続けます。

私が受け取り続けるエラーは、「ブリッジヘッダーのインポートに失敗しました(ブリッジヘッダーへのパス)」です(括弧内ではなく、ブリッジヘッダーへのパスがエラーに表示されます)。

Pickleターゲットのビルド設定で「Defines module」を「Yes」に設定しようとしましたが、それでも機能しません。ビルド設定で、ブリッジヘッダーファイルへの正しいパスがあることも確認しました。

テストの設定方法に関するアイデアはありますか? Xcode 6.3.2を使用しています。追加情報が必要な場合はお知らせください。

新しいタブで画像を開くと、画像が大きく表示されます。

17
dcgoss

これを手伝ってくれた@mattに感謝します!

画像を右クリックして新しいタブで開くと、画像が大きく表示されます。

https://github.com/CocoaPods/CocoaPods/issues/2695 で説明したように、問題はプロジェクトの一部としてCocoapodsを使用することにあるようです。この問題を解決するリンクの下部にある答えは、アプリケーション設定をクリックしてから、プロジェクトInfo(ターゲットの設定ではない)をクリックすることです。そこにConfigurations設定が表示されます: enter image description here

また、構成設定に2つのターゲットがあり、メインターゲットがCocoapodsにリンクされている間、テストターゲット構成設定がnoneに設定されていることにも気付くでしょう。修正は、テストターゲットの横にあるNone値を、メインターゲットと同じ値に変更することにあります。 enter image description here

これで、両方ともCocoapodsにリンクされました。メインターゲットのDefines moduleBuild SettingsYesに設定されていることを確認し、プロジェクトをビルドすると、テストファイルのエラーが解消されます。

また、この修正を行った後、別のエラーが発生し、リンカーがテストターゲットでライブラリが見つからないというエラーが発生しました。この欠落したライブラリは、プロジェクトで使用していた別の依存関係であり、メインターゲットのLink Binary with LibrariesBuild Phases設定にリンクされているすべての依存関係がテストにコピーされたことを確認することで、このエラーを解決しましたLink Binary with Libraries設定内のターゲットのBuild Phases

33
dcgoss

これを行う必要はありません。 Podfileで link_with を使用できます。あなたの場合、あなたはそうするでしょう。

link_with 'Pickle', 'PickleTests'

その後 pod update

4
Tomáš Linhart

テストクラスの上にモジュールをインポートする

@testable import myModuleName

モジュール名はTarget->Build Settings-> Product Module Nameで確認できます。

次に、そのモジュールに属する任意のクラスを使用できます。クラスを1つずつインポートする必要はありません。

3
isuru

FWIW、Xcode 7で、アノテーションを付けてインポートします:@testable。例:

import Pickle
@ImportTests

次に、コードの完了とコンパイルでクラスを確認できます。ソース: https://www.natashatherobot.com/Swift-2-xcode-7-unit-testing-access/

1
Lance Kind