2015-09-11 6 views
5

Ich versuche, die neue UI-Testfunktion in Xcode 7 zu erweitern, indem ich die aktuellen Bildschirmelemente (Beschriftungen, Bilder, Schaltflächen) abfotografiere und ihre Zugänglichkeitsinformationen in JSON-Dateien speichere.App-Ressourcen nicht verfügbar, wenn UI-Test in Xcode 7

Die Idee ist, dass beim späteren Ausführen der UI-Tests ein aktueller Bildschirm-Snapshot erstellt und mit dem vorhandenen verglichen werden kann. Der Test schlägt fehl, wenn zusätzliche oder fehlende Elemente gefunden werden.

Leider scheinen die App-Ressourcen während des UI-Tests nicht verfügbar zu sein, auch nicht mit dem richtigen Ziel, sodass die JSON-Dateien nicht zum Vergleich geladen werden können. Der folgende Standard-Code nicht auf eine Ressource laden:

guard let resourcePath = NSBundle.mainBundle().pathForResource ("StartScreenShapshot", ofType:"json") else { 
     XCTFail ("can't load resource StartScreenShapshot") 
     return 
    } 

kann ich verstehen, warum Apple diesen Sandbox-Ansatz hat, als UI-Tests auf basieren sollten, was auf dem Bildschirm passiert, und den Zugriff auf die Funktionsweise des App shouldn‘ Es wird nicht nötig sein, aber keinen Zugriff auf das Ressourcenbündel zu haben ist ein Schmerz.

Gibt es eine Möglichkeit, lokale Ressourcen während des Xcode 7 UI-Tests lokal oder von der App aus zu laden?

Speichern der Dateien lokal (automatisch) wäre auch ein großes Plus, würde sparen sie manuell erstellen.

+1

scheint du hast dich dem ol zugewandt d Problem mit Tests und Bundles, wenn ja, schau dir diese Frage an http://stackoverflow.com/a/19636417/1403732 – sage444

+0

Danke Mann, das war das Problem. Habe eine Antwort geschrieben, Prost. – danfordham

Antwort

4

Dank @ sage444

Für Einheit den Main() Methode für die Prüfung nicht funktioniert einen Ressourcenpfad Abrufen unter Verwendung einer Klasse der Fall ist.

guard let resourcePath = NSBundle (forClass: self.dynamicType).pathForResource (contentName, ofType:"json") else { 
     XCTFail ("can't load resource \(contentName)") 
     return 
    } 
0

Dank @danfordham

für Swift 3

1) Kopieren Bündel Ressourcen Aktualisiert enter image description here

2) Referenz neues Bündel auf diese Weise,

guard let path = Bundle(for: type(of: self)).path(forResource: contentName, ofType: "json") else { 
    XCTFail ("can't load resource \(contentName)") 
    return 
} 
Verwandte Themen