2009-12-22 15 views
6

Ich habe vor kurzem angefangen, eine App zu testen, die ich für das iPhone schreibe. Ich habe die Grundlagen, eigene Tests zu erstellen, auch wenn es ein wenig suboptimal erscheint. Ich habe jedoch echte Probleme beim Einrichten der Code Coverage-Analyse mit gcov.Wie richtet man gcov für die Coverage-Analyse im iPhone SDK ein?

Ich folgte den Anweisungen hier: http://www.cubiclemuses.com/cm/articles/2009/05/14/coverstory-on-the-iphone/, die an anderen Orten sehr ähnlich sind. Ich habe versucht, Google's AppleScript aus ihrer Toolbox für Mac zu verwenden, nur für den Fall, dass ich etwas falsch in Xcode eingeben würde.

Ich habe Apples iPhoneUnitTests sample als Basisprojekt verwendet und einfach Google-AppleScript ausgeführt, um Code-Coverage-Tests gegen das CalcTests-Ziel zu ermöglichen, um ein gut ausgelagertes, automatisiertes Beispiel zu erhalten, das nicht funktioniert. Egal, welches Szenario verwende ich, mein eigener Code, Apples, manuell die richtigen Variablen einstellen oder lassen Googles Apple es für mich tun, alles, was ich bekommen sind diese Fehler in der Debug-Konsole, sobald die Tests abgeschlossen sind ausgeführt wird:

profiling:/Users:Cannot create directory 
profiling:/Users/jpo/Downloads/iPhoneUnitTests/build/iPhoneUnitTests.build/Debug-iphoneos/CalcTesting.build/Objects-normal/armv6/CalcViewController.gcda:Skip 
profiling:/Users:Cannot create directory 
profiling:/Users/jpo/Downloads/iPhoneUnitTests/build/iPhoneUnitTests.build/Debug-iphoneos/CalcTesting.build/Objects-normal/armv6/Calculator.gcda:Skip 
profiling:/Users:Cannot create directory 
profiling:/Users/jpo/Downloads/iPhoneUnitTests/build/iPhoneUnitTests.build/Debug-iphoneos/CalcTesting.build/Objects-normal/armv6/CalcAppDelegate.gcda:Skip 
profiling:/Users:Cannot create directory 
profiling:/Users/jpo/Downloads/iPhoneUnitTests/build/iPhoneUnitTests.build/Debug-iphoneos/CalcTesting.build/Objects-normal/armv6/main.gcda:Skip 

Die GCDA-Dateien sind nicht erstellt, und ich habe nichts zu analysieren. Jede Hilfe mit diesem würde sehr geschätzt werden.

Antwort

6

Die Lösung besteht darin, dass diese Anleitungen sich auf den laufenden Code im iPhone-Simulator beziehen. Da ich Tests auf Anwendungsebene durchführe, bin ich Cross-Profiling und muss this information folgen.

Dann setze ich die Umgebungsvariable GCOV_PREFIX, um es im Dokumentenverzeichnis meiner Anwendung abzulegen, und dann verwende ich den Organizer in Xcode, um das Paket meiner App vom Gerät herunterzuladen, um die .gcda-Dateien aus dem Documents-Verzeichnis zu holen. Dies ist ziemlich umständlich und eignet sich kaum für automatische Coverage-Tests, aber es ist die einzige Lösung, die ich angesichts der Einschränkungen der Ausführung in einer Sandbox und Verwendung von Klassen, die nur zum Testen auf dem Gerät verfügbar sind (nämlich MediaPlayer.framework), sehen kann.