>

기존 iOS 프로젝트, 테스트 케이스 및 테스트에 필요한 jpg 파일에 Cocoa Touch Unit Testing Bundle 유형의 새로운 대상을 추가했습니다.

다음 코드를 사용하여 테스트 번들에서 이미지를로드하려고합니다 :

@implementation PhotosViewController_Tests : XCTestCase
-(void)addImage:(NSString *)imageName
{
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    NSString *imagePath = [bundle pathForResource:imageName ofType:@"jpg"];
    UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
    ...
}

그러나 번들은 테스트 번들이 아니라 기본 번들을 반환하며 imagePath 및 이미지는 유효하지 않습니다.

이 코드를 사용하여 기본 번들에서 이미지를 성공적으로로드 할 수 있지만 bundleForClass가 단위 테스트 대신 mainBundle을 반환하는 이유를 이해하지 못합니다.

[NSBundle allBundles] 를 인쇄했습니다  그리고 메인 번들도 얻습니다 :

"NSBundle </var/mobile/Applications/uuid/Photos Light.app> (loaded)"

프로젝트가 생성 된 후 단위 테스트 대상을 추가하는 것과 관련이 있다고 생각하지만 테스트 번들에서 이미지를로드하기 위해 무엇을해야하는지 알 수 없습니다.


  • 답변 # 1

    테스트 대상에서 NSBundle에 다음과 같은 확장을 추가해보십시오.

    @implementation NSBundle (MyAppTests)
    + (NSBundle *)testBundle {
        // return the bundle which contains our test code
        return [NSBundle bundleWithIdentifier:@"com.mycompany.MyAppTests"];
    }
    @end
    
    

    테스트 번들에서 리소스를로드해야하는 경우 해당 카테고리를 가져 오면 코드가 다음과 같이 보입니다.

    NSString *imagePath = [[NSBundle testBundle] pathForResource:imageName ofType:@"jpg"];
    UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
    
    

  • 이전 jquery - URL을 변경하지 않고 Twitter Bootstrap 'nav-tabs'메뉴를 만듭니다가능합니까?
  • 다음 php - 공유 호스팅에 내 laravel 앱을 배포 한 후 HTTP ERROR 500 가져 오기