2010-12-16 12 views
12

Ich habe ein Testziel für iOS-Einheiten erstellt, um Logiktests gemäß den in der Apple-Dokumentation enthaltenen Schritten durchzuführen. Ist es möglich, ein statisches Bibliotheksprojekt mit dem SenTestingKit von XCode Unit-Test zu testen?

jedoch meine Build fehlschlägt, und ich erhalte den folgenden Fehler:

Undefined symbols:
"_OBJC_CLASS_$_MyClass", referenced from: objc-class-ref-to-MyClass in LogicTests.o ld: symbol(s) not found collect2: ld returned 1 exit status

Normalerweise, wenn ich in einer Anwendung meine statische Bibliothek verwenden wollte würde ich die library.a Datei enthalten, und die Header (einschließlich der MyClass.h Datei ...). Ist etwas zusätzliches erforderlich, um logische Tests in einer statischen Bibliothek innerhalb desselben Projekts auszuführen, wenn meine Testfälle MyClass.h verwenden?

Tjhanks

+0

Gute Frage. Schlechte Antwort, Sir. Die Wahrheit ist, dass Sie aufgrund der Natur einer statischen Bibliothek keine Anwendungstests durchführen können. – Daniel

Antwort

2

Ich löste tatsächlich es einfach. Ich musste alle .m-Dateien in meinem Projekt auf die "Compile Sources" des LogicTest-Ziels kopieren. Die Quellen verweisen nicht nur auf die Frameworks, sondern auch auf den Abschnitt "Link Binary mit Bibliotheken" des Ziels.

Ich hoffe, das hilft anderen

+2

Für eine statische Bibliothek ist es besser, Ihre Quellen nicht in Ihr Testziel einzubeziehen. Sie müssen Ihre .m-Dateien hinzufügen, wenn Sie _nicht_ mit einer statischen Bibliothek arbeiten. –

+0

Jon, das ist irgendwie verwirrend, kannst du ein bisschen klarer sein? Warum solltest du besser dran sein? –

+0

Es ist ein Problem, denn jedes Mal, wenn Sie eine neue Datei erstellen, müssen Sie daran denken, sie zu zwei Zielen hinzuzufügen. Mit Xcode können Sie Ihren Testcode von dem zu testenden Code getrennt halten und ihn mit dem Testcode verknüpfen. –

2

Ja, Xcode 4.2 hat eine Vorlage für Cocoa Touch Static Library mit Tests.

+1

Yup! Leider scheint es nur logische Tests zu unterstützen. –

+0

Bitte überprüfen Sie meine Antwort: http://StackOverflow.com/a/11267670/662605 – Daniel

12

Aufgrund der Art der statischen Bibliotheken, können Sie nicht Anwendungstests, die ausführen, indem der Klang ist was du versuchst zu tun. Sie können jedoch logische Tests durchführen.

Sie hatten Ihre Beobachtungen bezüglich Komponententests in der Client-Anwendung richtig.

Die Xcode-Vorlage enthält optional Komponententests. Wenn Sie jedoch die Build-Einstellungen für diesen Komponententest aufrufen, sehen Sie, dass kein Testhost oder Paketladeprogramm angegeben wird. Dies liegt an der Natur von statischen Bibliotheken. Sie sind keine Anwendungen, sie sind Bibliotheken - so können Sie Logiktests durchführen, Sie können keine Anwendungstests tun.

Anwendungstests Sie auf Ihre statische Bibliothek ausführen kann wünschen kann das folgende Szenario sind:

My library creates an SQLite database at runtime, I wish to perform a unit test to check everything is inserting and/or updating as expected.

Um dies mit Unit-Tests zu prüfen, eine andere Anwendung erstellen müssen, die oder anderweitig umfasst ist abhängig Ihrer Bibliothek. Diese Anwendung enthält dann Ihre Bibliothek und Anwendungstests können dann dort eingerichtet werden.

Verwandte Themen