2014-04-07 14 views
10

Nie mogę uzyskać testów jednostkowych XCTestCase dla biblioteki statycznej Cocoa Touch, która opiera się na kodzie, który używa imageNamed do pracy.Korzystanie z obrazu UIImageNamed wewnątrz XCTestCase

Dodałem obraz "plane.png" do celu testowego, ale [UIImage imageNamed] powraca do zera.
Po wyraźnym określeniu ścieżki obrazu w teście i załadowaniu obrazu z pliku, działa.

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

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

Jak mogę napisać testy jednostkowe dla kodu używającego imageNamed?

Odpowiedz

7

W XCTest nie jesteś w mainBundle. A więc pobierz obraz z pakietu XCTest.

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

(to rozwiązanie jest dla systemów iOS 8 +)

+0

Ta nowa funkcja korzysta z pamięci podręcznej obrazu systemu, w przeciwieństwie do 'imageWithContentsOfFile', więc w iOS8 + można testować. Konieczność zmiany wszystkich wywołań 'imageNamed' po prostu po to, aby móc przetestować kod, nie jest idealna, ale tak się stanie. – Pieter

1

Ponieważ twój projekt Xctest działa jak inny projekt. Obowiązkowe jest również dodanie pliku .png dla xctest.

dodaj również swój obraz plane.png do projektu Xctest. Upewnij się, że zaznaczone jak

enter image description here

To działa dobrze dla mnie z tym samym kodem

enter image description here

+0

Obraz zostanie dodany do celu badania (nie sądzę, ładowanie z pliku będzie działać, gdyby nie było?) – Pieter

+0

Zobacz moją zmianę. Działa doskonale. – Rajesh

+0

To nie działa dla mnie, testuję "statyczną bibliotekę dotyku kakao", więc zasób nie może zostać dodany do samej biblioteki statycznej, może to różnica? – Pieter

Powiązane problemy