2015-07-10 8 views
14

Ich habe Klasse mit dem Namen Meal.swift in meinem Projekt und einen KomponententestXcode-Test erkennt nicht meine Klasse

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") 

} 

Aber das Problem ist, dass: Verwendung von ungelösten identifier "Meal"

+0

sicher, dass du '' '@ testable''' nicht verpasst hast, wenn die Mahlzeit nicht öffentlich ist –

+0

@ChristianDietrich meine Mahlzeitklasse ist öffentlich –

+0

Wie benutzt man @testable? –

Antwort

14

@testable import MyApp sollte gut funktionieren. Denken Sie daran, für Ihr UITest Ziel geeignete Konfigurationen innerhalb von Debug festzulegen.

enter image description here

+0

Ich bekomme "kein solches Modul", auch nachdem ich die Konfiguration auf .debug geändert habe, wie das Bild zeigt. –

+0

Ich musste dies tun: https://stackoverflow.com/questions/32008403/no-such-module-when-using-testable-in-xcode-unit-tests/44687800#44687800 –

12

Xcode 7 fügt die @testable import Anweisung hinzu, um Benutzertests zu vereinfachen. An der Spitze der Unit-Test-Klasse-Dateien, fügen Sie die folgende Anweisung:

@testable import MyApp 

Wo MeineAnw der Name Ihres iOS-App ist. Jetzt sollte das Einheitentestziel in der Lage sein, die Klassen in Ihrer App zu finden und die Tests auszuführen. Wenn Sie Linkfehler erhalten, die darauf hinweisen, dass Xcode Ihre App-Klassen nicht finden kann, stellen Sie sicher, dass der Build-Wert des Produktmodulnamens mit dem in der -Anweisung, MyApp in diesem Beispiel verwendeten Wert übereinstimmt.

Wenn @testable import nicht für Sie funktioniert, besteht eine Problemumgehung darin, Ihre App-Klassen zum Einheitentestziel zu machen. Sie können die Zielmitgliedschaft einer Datei in Xcode mithilfe des Dateiinspektors festlegen.

+1

'@testable import' funktioniert nicht für meine UITest-Klasse. Warum? Es muss eine Möglichkeit geben, dies zu tun, ohne jede Datei manuell zum UITest-Ziel hinzuzufügen. –

+0

Es ist glitchy - ich konnte @testable Arbeit an unserem großen Projekt noch nicht machen. In der Regel ist das Problem ein Fehler "kein solches Modul" während der Kompilierzeit, und nach endlosen Stunden des Fiedelns habe ich entschieden, dass es einfach nicht zuverlässig funktioniert und definitiv nicht auf UI-Testklassen. - Ich bin ziemlich sicher, dass es Probleme gibt, wenn Sie mehr als ein Paket (oder "Modul") in Ihrem Projekt haben. Zum Beispiel haben wir alles in verschiedene Pakete unterteilt, wie zum Beispiel Dienstprogramm, Modell, Ansicht usw. Wir können die Testklassen nicht dazu bringen, diese Module erfolgreich zu importieren. – Zac

+2

** Produkt Modulname Build Einstellung ** machte meinen Tag - danke! – user1244109

4

ich dieses Problem auch auftreten, meine Testdatei was für mich gearbeitet nachlädt und die

@testable import FoodTracker 

dann an diesem Punkt erneut eingeben, erfasst es meine FoodTracker Klassen (Meal-Klasse) und Fehler sind weg.

1

Klicken Sie auf Ihre Mahlzeitklasse. Auf der rechten Seite sehen Sie den Bereich "Zielmitgliedschaft". Wählen Sie Ihr Testprojekt. (Xcode 7) Voilà.

Verwandte Themen