Использование изображения UIImageNamed внутри XCTestCase
Я не могу получить модульные тесты XCTestCase для Cocoa Touch Static Library, которые полагаются на код, который использует imageNamed
для работы.
Я добавил свое изображение "plane.png" к целевой цели, но [UIImage imageNamed]
продолжает возвращать нуль.
Когда я явно укажу путь к образцу в тесте и загружаю изображение из файла, он работает.
NSString* imagePath = [[[NSBundle bundleForClass:[self class]] resourcePath] stringByAppendingPathComponent:@"plane.png"];
UIImage* imageWorks = [UIImage imageWithContentsOfFile:imagePath];
UIImage* imageStaysNil = [UIImage imageNamed:@"plane.png"];
Как я могу написать модульные тесты для кода, который использует imageNamed
?
Ответы
Ответ 1
В XCTest вы не в mainBundle. Так что получите свое изображение из вашего пакета XCTest.
(это решение для iOS8+)
ObjC
[UIImage imageNamed:@"..." inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil];
стриж
UIImage(named: "...", in: Bundle(for: type(of: self)), compatibleWith: nil)
Ответ 2
Так как ваш xctest-проект действует как другой проект, обязательно добавить ваш файл .png для xctest.
добавьте изображение plane.png в xctest-проект.
Убедитесь, что вы проверили как
![enter image description here]()
Он отлично работает для меня с тем же кодом
![enter image description here]()
Ответ 3
Принятый ответ не работал для меня; вот что сделал.
let image = UIImage(contentsOfFile:
Bundle(for: TheTestClass.self)
.path(forResource: "plane", ofType: "jpg")!)!