2014-04-07 5 views
10

Ich kann keine XCTestCase-Komponententests für eine statische Cocoa Touch-Bibliothek abrufen, die auf Code basieren, der imageNamed verwendet, um zu funktionieren.Verwenden von UIImage imageNamed in XCTestCase

Ich habe mein Bild "plane.png" zum Testziel hinzugefügt, aber [UIImage imageNamed] wird immer wieder Null.
Wenn ich explizit den Pfad des Bildes im Test angeben und das Bild aus der Datei laden, funktioniert es.

NSString* imagePath = [[[NSBundle bundleForClass:[self class]] resourcePath] stringByAppendingPathComponent:@"plane.png"]; 
UIImage* imageWorks = [UIImage imageWithContentsOfFile:imagePath]; 

UIImage* imageStaysNil = [UIImage imageNamed:@"plane.png"]; 

Wie kann ich Unit-Tests für Code schreiben, imageNamed verwendet?

Antwort

7

In XCTest Sie nicht in Main sind. Holen Sie sich Ihr Bild aus Ihrem XCTest-Bundle.

[UIImage imageNamed:@"..." inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil]; 

(diese Lösung ist für iOS8 +)

+0

Diese neue Funktion verwendet den System-Image-Cache, im Gegensatz zu imageWithContentsOfFile, so dass es in iOS8 + möglich ist zu testen. Alle 'imageNamed' Calls zu ändern, um den Code in der Unit testen zu können, ist jedoch nicht ideal, aber es reicht. – Pieter

1

Da Ihr xctest-Projekt sich wie ein anderes Projekt verhält Sie müssen Ihre .png-Datei auch für xctest hinzufügen.

fügen Sie Ihr plane.png Bild zu xctest Projekt auch hinzu. Stellen Sie sicher, Sie haben wie

geprüft

enter image description here

Es funktioniert gut für mich mit dem gleichen Code

enter image description here

+0

Das Bild auf das Testziel hinzugefügt wird (ich glaube nicht, dass der Laden von Datei, wenn es nicht so wäre funktionieren würde?) – Pieter

+0

meine bearbeiten sehen. Es funktioniert vollkommen in Ordnung. – Rajesh

+0

Es funktioniert nicht für mich, ich teste eine "kakao touch static library", also kann die Ressource nicht zur statischen Bibliothek selbst hinzugefügt werden, vielleicht ist das der Unterschied? – Pieter