web-dev-qa-db-ja.com

XCTestの基礎となるモジュールをロードできません

私はSwiftでXcodeに取り組んでいて、デフォルトではXCTestを参照するテストファイルを作成します。

ターゲットメンバーシップをメインプロジェクトに設定すると、このエラーが発生します。

XCTestの基礎となるモジュールをロードできません

このターゲットメンバーシップが設定されていない場合、テストは正しく実行され、すべてうまく機能します。

シモンズ:私はスウィフトに不慣れです、そしてそれはおそらく愚かな質問です(私を啓発してください)

161
brduca

メインプロジェクトはXCUnitフレームワークとリンクしていません。プロジェクト用に別のテストターゲットを作成し(まだ存在していない場合)、そのターゲットにテストソースファイルを追加します。

  1. プロジェクトナビゲータでプロジェクトを選択します。これでプロジェクトの設定がエディタに表示されます。
  2. ターゲットを一覧表示している列の下部にある[+]ボタンをクリックします。
  3. iOSプロジェクトテンプレートを使用している場合iOS > Test > iOS Unit Testing Bundleを選択します。

    OS Xプロジェクトテンプレートを使用している場合OS X > Test > OS X Unit Testing Bundleを選択します。

141
pwc

問題のファイルがメインターゲットではなくテストターゲットのみにあることを再確認してください。テストターゲットのみがインポートするフレームワークを持ちます。

162
Aaron Zinman

テストファイル/クラスをメインターゲットに追加しただけで、誤ってテストターゲットに追加したわけではありません。そのような単純な。

溶液:

1)メインターゲットの[Build Phases]タブの[Compile Sources]リストからテストファイルを削除します。

2)テストターゲットの[Build Phases]タブの[Compile Sources]に同じファイルを追加します。

それは問題を解決しなければなりません

27
Alfishe

XCTest.frameworkにリンクするmacOS動的フレームワークターゲットを作成すると、このエラーが発生します(ターゲットはフレームワークターゲットであり、テストターゲットではありません)。

この場合、問題は以下を追加することによって解決されます。

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks

プロジェクトの「ビルド設定/フレームワーク検索パス」へ。

6

このようなStack Overflowページをめぐる多くのトラブルシューティングとバウンスの後、私は他のiOS Unit Testのトラブルシューティングページで言及されていない詳細を1つ見つけることができました。

プロジェクトでCocoaPodを使用している場合は、メインアプリケーションのターゲット内にテストターゲットを入れ子にしてください。テストターゲットを作成した場合、ポッドファイルに含まれていない可能性がありますafterpod initを実行しています。あなたのポッドファイルは次のようになります。

target 'YourApp' do
    target 'YourAppTests' do
        inherit! :search_paths
        # Pods for testing
    end
end

忘れずにpodfileを保存して、pod installを実行してください。

それが役に立てば幸い!

5

これは少し遅れるかもしれませんが、あなたがしなければならないことは以下のとおりです。

ファイル>新規>ターゲット> iOS Unit Testing Bundleをクリックします。

そしてそこにあなたのテストを追加します。これは私のために働きました。問題は、プロジェクトを作成したときにユニットテストの作成を選択しなかったことです。これが誰かに役立つことを願っています。

5
Clinton D'Souza

この問題はプロジェクトで2回発生します。

  1. 新しいプロジェクトを作成するときに、プロジェクトにUnitTestingBundleを追加しない場合。
  2. あなたのプロジェクトにCocoaPodsをインストールするときはいつでも毎回ではありません。

1:答え:

  • ファイルへ移動ファイルをクリックしてください。

  • それからあなたは最初のオプションを見ますNewそれをクリックしてください。

  • それをクリックした後、あなたはTargetでSome Option Clickが表示されます。

  • そして、検索バーの検索IOS単体テストバンドルと問題の追加が解決されました。

  • compilerがこれを追加する許可をあなたに与えることができないならば、次に与えられるときSecond Methodを試してください。

2。CocoaPodの問題に答える:

  • 製品へ行く製品をクリックしてください。

  • クリーンをクリックするか、cmd + kを押します。

  • 問題は解決しました。

2
zeeshan Dar

テストフレームワークが選択されたときに、すべてのモジュールに対してターゲットメンバーシップがチェックされていることを確認してください。 「表示」 - >「ユーティリティ」 - >「ファイルインスペクタを表示」を選択すると、「ターゲットメンバーシップ」オプションを表示できます。

1
karma

一般に認められている答えはこの問題をほとんどの場合解決していますが、このエラーに遭遇するもう1つの方法があります。

あなたがすでにそれを確実にしているならば:

@pwc @ nick-n他が指摘しているように

  1. ターゲットメンバーシップ用のClassTest.Swiftファイルがのみ Testingターゲットに添付されていることを確認します。
  2. ClassTest.Swiftnotあなたのメインアプリターゲットの下に表示されています>ソースの構築>ソースのコンパイル

これがあなたがチェックできる他のものです:

.podspecsファイルに

あなたのsource_filesが直接的または間接的にtestingディレクトリを含んでいないことを確認してください。

例:

s.source_files = ["Classes/**/*.{Swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]

Classes/**/*.{Swift}には、ディレクトリMyPodProjTestsを除外する必要があるという事実をオーバーライドするすべてのものが含まれています。

Solution:

s.source_files = ["Classes/MyPodProj/**/*.{Swift}", "Classes/**/*.{xib}"]

注:これは極端にエッジケースであり、完全にヒューマンエラーですが、指摘する価値があると思います

1
thesummersign

@Alfisheが上で述べたように:

Compiler Sourcesの下のBuild Phasesからテストファイルを削除する必要があります。

以下の通り


enter image description here

0
Suhaib

私は同じ問題を抱えていて、私にとっての解決策は以下の通りでした。

  1. 自分のスキームを選択
  2. スキームを編集...
  3. Scheme設定ウィンドウが開いたら、ここにリダイレクトされるように "Test"という名前の左のタブを選択してください: enter image description here
  4. ご覧のように、私のUITestsはここには追加されていませんが、私のプロジェクトには存在しているので、プラスボタンをタップしてUITestsターゲットを選択するだけです( enter image description here
  5. 次に「追加」ボタンをタップして設定ビューを閉じます
  6. クリーンなプロジェクトで終了し、もう一度試してください。
  7. そしてそれも確認することを忘れないでください: https://developer.Apple.com/library/archive/qa/qa1954/_index.html

この答えがお役に立てば幸いです。

シモンズ:最後の1つはビルド設定の私のテストターゲットで私は正しく設定されていないこれらのプロパティをチェックしなければならなかったと思います:

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_Arch = YES;
VALIDATE_PRODUCT = NO;
0
O. Boujaouane

私は上記すべてを行いましたが、それでもテストしたいメソッドにアクセスすることは許可されませんでした。しかし、私がテストケースを書く前は、一度プロジェクトをビルドしてから、メソッドをテストすることができました。それでそれを試してみて、それがいずれかの問題を解決したかどうか私に知らせてください。

0
sunil chayagol