2012-05-16 11 views
6

Ich habe einen XCode-Arbeitsbereich mit einem Benutzeroberflächenprojekt (UI) und einem Kernlogikprojekt (Core). Ich möchte OCUnit Komponententests im UI-Projekt durchführen. Daher habe ich wie üblich ein neues Testziel hinzugefügt.Komponententest mit einer statischen Bibliothek

Ich bin in der Lage, Tests gut auszuführen, bis ich im Haupt-UI-Ziel importieren Anweisungen für Klassen, die wiederum auf das Core-Projekt verweisen.

Der Fehler, den ich bekomme, ist "Lexikalische oder Präprozessor-Ausgabe 'xxx.h' Datei nicht gefunden". Ich erhalte diese Nachricht nicht, wenn ich das Hauptbenutzeroberflächenziel direkt erstelle.

Es ist, als ob das Hauptziel der Benutzeroberfläche über Core weiß, wenn es erstellt wird, aber wenn es vom Testziel referenziert wird, scheint es nichts über Core zu wissen.

Ich machte den Schritt des Hinzufügens eines Verweises auf das Kernprojekt mit dem "Link Binaries with Libraries" Der Eintrag in der Liste bleibt rot. Ein Anhaltspunkt? Vielleicht, aber die rote Referenz in der Linkliste hält das UI-Ziel nicht davon ab, Kernklassen zu erstellen und zu verwenden. Ich machte auch das Hauptziel eine Abhängigkeit des Testziels.

Antwort

9

Stellen Sie sicher, das Apple-Beispielcode überprüfen „Unit Tests“: https://developer.apple.com/library/ios/#samplecode/UnitTests/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011742

Vergewissern Sie sich Ihre Bibliothek Projekt als Dependancy in Ihrem OCUnit Testziel Build Phasen festgelegt ist, und es ist als Bibliothek verknüpft.

Öffnen Sie Ihr Projekt in Xcode. Gehen Sie im Menü Datei zu Projekteinstellungen ... (oder Arbeitsplatzeinstellungen ..., wenn Sie einen Arbeitsbereich verwenden). Klicken Sie auf Erweitert ... und vergewissern Sie sich, dass Eindeutig aktiviert ist. Reinigen und neu aufbauen.

Überprüfen Sie Ihr BUILD_PRODUCTS_DIR, um festzustellen, ob die Header für Ihre Bibliothek dort angezeigt werden. Wenn dies nicht der Fall ist, überprüfen Sie zunächst die Build-Phasen in Ihrem Bibliotheksziel, um sicherzustellen, dass die benötigten Header im Bereich Public sind (der Abschnitt Project funktioniert ebenfalls, aber versuchen Sie Public, um zu sehen, ob das Ihr Problem löst).

Das deckt die häufigsten Probleme ab, die in Ihrer Situation auftreten. Überprüfen Sie im Zweifelsfall die Zieleinstellungen im UnitTests-Beispiel gegen Ihre. Viel Glück!

0

Gehen Sie in Ihrem Testziel zu Buildeinstellungen. Fügen Sie den Header Ihrer statischen Bibliothek den Pfad zu Kopfzeilen-Suchpfaden hinzu.

2

Zusätzlich zu Jon Reids Antwort musste ich auch Folgendes tun: In Ihrem Testziel, gehen Sie zu Build-Einstellungen. Setzen Sie "Immer Benutzerpfade suchen" auf JA