2014-04-07 2 views
10

imageNamed 코드를 사용하는 Cocoa Touch 정적 라이브러리에 대한 XCTestCase 단위 테스트를 수행 할 수 없습니다.UIImage imageNamed를 사용하여 XCTestCase

"plane.png"이미지를 테스트 대상에 추가했지만 [UIImage imageNamed]은 nil을 계속 반환합니다.
테스트에서 이미지의 경로를 명시 적으로 지정하고 파일에서 이미지를로드 할 때 작동합니다.

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

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

imageNamed을 사용하는 코드의 단위 테스트는 어떻게 작성합니까?

답변

7

와 나를 위해 잘 작동

enter image description here

같이 확인했다. XCTest 번들에서 이미지를 가져옵니다.

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

(이 솔루션은 iOS8의 +입니다) 이미지가 시험 대상에 추가됩니다

+0

이 새 함수는'imageWithContentsOfFile'과 달리 시스템 이미지 캐시를 사용하므로 iOS8 +에서는 테스트 할 수 있습니다. 모든'imageNamed' 호출을 단순히 유닛 테스트가 가능하도록 변경하는 것이 이상적이지는 않지만 그렇게 할 것입니다. – Pieter

1

xctest 프로젝트가 다른 프로젝트처럼 작동하므로 xctest에 .png 파일을 추가해야합니다.

또한 plane.png 이미지를 xctest 프로젝트에 추가하십시오. 확인 당신은 그것은 당신이 mainBundle에없는 XCTest에서 동일한 코드

enter image description here

+0

이 (가 아니었다면 나는 파일의 로딩이 작동합니다 생각하지 않는다?) – Pieter

+0

내 편집을 참조하십시오. 완벽하게 잘 작동합니다. – Rajesh

+0

그것은 나를 위해 작동하지 않습니다, 나는 "코코아 터치 정적 라이브러리"를 테스트 중이므로 정적 라이브러리 자체에 리소스를 추가 할 수 없습니다. 차이점은 무엇입니까? – Pieter

관련 문제