XCTestの基本モジュールをロードできません


180

私はXcodeで迅速に作業しており、デフォルトではXCTestを参照するテストファイルを作成します。

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

XCTestの基本モジュールをロードできません

このターゲットメンバーシップが設定されていない場合、テストは適切に実行され、すべてが正常に動作します。

PS:私はSwiftを初めて使用するので、おそらく馬鹿げた質問です(私に教えてください)。


17
馬鹿な質問のバッタはなく、馬鹿な質問者だけです。;-)これを読むすべての人が同じ問題を抱えることになるので、すばらしい質問です。
ランスの種類

回答:


168

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

  1. プロジェクトナビゲーターでプロジェクトを選択します。エディターでプロジェクトの設定が開きます。
  2. ターゲットがリストされている列の下部にある[+]ボタンをクリックします。

ここに画像の説明を入力してください

  1. iOSプロジェクトテンプレート作業している場合はiOS > Test > iOS Unit Testing Bundle

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


3
一方、iOSでは、iOS UITesting Bundle(UIテストに使用)またはiOS単体テストバンドル(単体テスト用)と呼ばれます
kuzdu

184

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


16
それが役立つ場合。「非テスト」ターゲット->ビルドフェーズ->ソースのコンパイルを選択します。「ClassTest.swift」が通常のビルドターゲットにないことを確認してください。
Nick N

メインバンドルとテストバンドルに含まれている場合、メインバンドルからどのように削除しますか。
James Robinson、

1
@NickNのおかげで、あなたは私が抱えていた正確な問題を指摘し、それは今修正されました!
Naishta 2016年

テストターゲット上にある場合、メインターゲットのメインテストメソッドにアクセスできないようです。
UKDataGeek

おかげでそれは魅力のように働きました。テストファイルを削除するだけでうまくいきました。
Ccr

32

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

解決:

1)メインターゲットの[ビルドフェーズ]タブの[コンパイルソース]リストからテストファイルを削除します

2)テストターゲットの「ビルドフェーズ」タブの「コンパイルソース」に同じファイルを追加します

問題を解決する必要があります


15

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

この場合、問題は以下を追加することで解決します

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

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


パーフェクト!ありがとう!
ランスの種類

9
より良い:$(PLATFORM_DIR)/Developer/Library/Frameworks複数のバージョンのXcodeが異なる名前でインストールされている場合(リリースバージョンとベータバージョンなど)。
rob mayoff

@robmayoffに感謝これは正しい解決策でした;-)
Oliver Pearmain

これは、サポートをテストするためのフレームワークを構築するときの正解です。
ダニエルウッド

7

このようなスタックオーバーフローのページを何度もトラブルシューティングして跳ね返った後、他のiOSユニットテストのトラブルシューティングページには記載されていない詳細を見つけました。

プロジェクトでCocoaPodsを使用する場合は、メインアプリケーションのターゲット内にネストされたテストターゲットを必ず含めてください。実行後にテストターゲットを作成した場合、podfileに含まれていない可能性がありますpod init。podfileは次のようになります。

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

忘れずにポッドファイルを保存し、実行pod install後に実行してください。

それが役に立てば幸い!


5

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

[ファイル]> [新規]> [ターゲット]> [iOSユニットテストバンドル]をクリックします。

そして、そこにテストを追加します。これでうまくいきました。問題は、プロジェクトの作成時にユニットテストの作成を選択しなかったことです。これが誰かを助けることを願っています。


2

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

  1. 新しいプロジェクトを作成するときにプロジェクトにUnitTestingBundleを追加しない場合。
  2. CocoaPodsをプロジェクトにインストールするとき、常にではないことがあります。

1:回答:

  • ファイルに移動ファイルをクリックします。

  • 次に、最初のオプションNewをクリックします。

  • それをクリックすると、ターゲットのオプションクリックが表示されます。

  • そして、サーチバーでIOSユニットテストバンドルと問題の追加が解決されます。

  • コンパイラがこれを追加する権限をあなたに与えることができない場合、以下が与えられたときに2番目の方法を試してください。

2. CocoaPodの問題に回答します。

  • 製品に移動する製品をクリックします。

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

  • 問題は解決しました。


2

受け入れられた回答でこの問題はほとんどの場合解決されますが、このエラーに遭遇する方法がもう1つあります。

既にそれを確認している場合:

@pwc @ nick-nなどから指摘されたとおり

  1. ClassTest.swiftターゲットメンバーシップのファイルは、テストターゲットにのみ添付されるようにします。
  2. ClassTest.swiftはないあなたのメインアプリのターゲット>ビルドソース>ソースをコンパイルの下に見えます

他に確認できることは次のとおりです。

あなたの.podspecsファイルで

source_filesテストディレクトリが直接的または間接的に含まれていないことを確認してください。

例えば ​​:

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

Classes/**/*.{swift}は、ディレクトリをMyPodProjTests除外する必要があるという事実を上書きするすべてが含まれていることに注意してください。

解決:

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

注:これは非常に極端なケースであり、完全に人為的なエラーですが、指摘する価値があると思いました。


すばらしい発言、すべてを私のに含めましたs.source_files。ありがとう!
Mauricio Chirino

1

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


1

私の場合、私はプライベートポッドのテストを行っていたため、podspecでは次のようになりました。

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/*.swift' end

しかし、Podfileで、次のようにテスト仕様を忘れていました。

target 'MyApp' do
use_frameworks!
pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end

0

上記のすべてを行いましたが、テストしたいメソッドにアクセスすることは許可されていませんでした。しかし、私が書くテストケースを作成する前に、プロジェクトを1回構築した後、メソッドにアクセスしてテストすることができました。ぜひ試してみて、問題が解決したかどうかをお知らせください。


0

私は同じ問題を抱えていて、私のための解決策は次のとおりでした:

  1. スキームを選択
  2. スキームを編集...
  3. 次に、Scheme設定ウィンドウが開いたら、「Test」という名前の左側のタブを選択して、ここにリダイレクトします。 ここに画像の説明を入力してください
  4. あなたが見ることができるように、私のUITestsはここに追加されていませんが私のプロジェクトに存在しているので、私はプラスボタンをタップして次のように私のUITestsターゲットを選択する必要がありました: ここに画像の説明を入力してください
  5. 次に、「追加」ボタンをタップして構成ビューを閉じます
  6. プロジェクトのクリーンアップを完了して、うまくいくかもう一度試してください
  7. そして、それも確認することを忘れないでください:https : //developer.apple.com/library/archive/qa/qa1954/_index.html

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

PS:最後に、ビルド設定のテストターゲットで、正しく構成されていないこれらのプロパティを確認する必要がありました。

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;

0

上記の@Alfisheと同じように:

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

以下に示すように


ここに画像の説明を入力してください


1
それを行うと、私が知る限り、テストを実行できません
Juan Curti


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.