Ich versuche, einige UI-Tests in meinem Projekt zu implementieren. Alles läuft gut, solange ich es einfach halte: notieren Sie den Testfall, fügen Sie einige Behauptungen hinzu und führen Sie dann den Test durch. Dies funktioniert gut, aber wenn ich versuche, aus meinem Test des Anwendungsmoduls zuzugreifen, der Linker einen Fehler wirft (siehe unten):Linker Fehler beim Zugriff auf das Anwendungsmodul in UI-Tests in XCode 7.1
in der Anwendungsquelldatei:
func foo() {
assert(true)
}
In der UI-Tests:
import XCTest
@testable import MyApp
func testExample() {
foo()
}
Fehler:
Undefined symbols for architecture i386: "MyApp.foo() ->()", referenced from: MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() ->() in MyAppUITests.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)
Undefined symbols for architecture x86_64: "MyApp.foo() ->()", referenced from: MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() ->() in MyAppUITests.o ld: symbol(s) not found for architecture x86_64
Ich habe foud ähnliches Problem hier gemeldet: https://forums.developer.apple.com/thread/20609 aber keine Lösung. Scheint mir wie die @testable
einfach nicht richtig funktioniert. Der Typ auf der developer.apple.com versuchte Abhilfe zu schaffen, indem er den Test-Host und den Bundle-Loader in den Einstellungen hinzufügte, aber ich denke nicht, dass dies der richtige Ansatz ist. Ich denke, die @testable
sollte einfach alles funktionieren lassen, und es sieht im Moment nicht so aus. Jede Hilfe wird geschätzt!
Sie sollten nicht so von Ihren UITests auf das Anwendungsmodul zugreifen .... aber wenn Sie wirklich wollen (bitte nicht), können Sie das Kontrollkästchen für Zielmitgliedschaft im Dateiinspektor aktivieren. Ich würde denken, dass '@ testable' in UITests nicht funktioniert, weil Sie nicht auf solche Funktionen zugreifen sollten. – JMFR
@JMFR können Sie erläutern, warum nicht? Für mich ist das ein perfektes Szenario, besonders wenn Sie einige statische Variablen oder Methoden zum Einchecken Ihrer Tests haben.Was Ihren Vorschlag betrifft, die Zielmitgliedschaft zu überprüfen, dies wollte ich mit '@ testable' vermeiden. – lawicko