web-dev-qa-db-ja.com

Xcodeテストでクラスが検出されない

私のプロジェクトと単体テストにMeal.Swiftという名前のクラスがあります

func testMealInitialization() {
    // Success case.
    let potentialItem = Meal(name: "Newest meal", photo: nil, rating: 5)
    XCTAssertNotNil(potentialItem)

    // Failure cases.
    let noName = Meal(name: "", photo: nil, rating: 0)
    XCTAssertNil(noName, "Empty name is invalid")

}

しかし問題は次のとおりです:未解決の識別子「食事」の使用

22

@testable import MyAppは正常に動作するはずです。 DebugターゲットのUITest内に適切な構成を設定することを忘れないでください。

enter image description here

Xcode 7は@testable importステートメントを追加して、ユーザーテストを簡素化します。単体テストクラスファイルの先頭に、次のステートメントを追加します。

@testable import MyApp

ここでMyAppはiOSアプリの名前です。これで、単体テストのターゲットがアプリ内のクラスを見つけてテストを実行できるようになります。 Xcodeがアプリクラスを見つけられないというリンクエラーが発生した場合は、製品モジュール名のビルド設定の値が@testable importステートメントで使用する名前と一致していることを確認してください。この例ではMyAppです。

@testable importが機能しない場合の回避策は、アプリクラスを単体テストターゲットのメンバーにすることです。ファイルインスペクタを使用して、Xcodeでファイルのターゲットメンバーシップを設定できます。

15
Mark Szymczyk

私もこの問題に遭遇しました、私のために働いたのは私のテストファイルをリロードして再入力することです

@testable import FoodTracker

その後、その時点で、FoodTrackerクラス(Mealクラス)が検出され、エラーはなくなりました。

7
ivyr

食事クラスをクリックします。次に、右側に「ターゲットメンバーシップ」セクションが表示されます。テストプロジェクトを選択します。 (Xcode 7)Voilà。

7
Manu

テストするクラスをTarget-> BuildPhases-> Compile Sourcesに追加するだけです。

0
AmirHossein

私の場合、作成したばかりの新しいクラスでのみエラーが発生し、混乱します。だから、それは私の新しいクラスのクラスメンバーシップの下のselect nit Test targetで機能します。または、クラスを削除して新しいクラスを再度作成し、その新しいクラスでnit Test Targetを選択します。

0
Firda Sahidi