xcode 단위 테스트에서 파일로드
Xcode 5 단위 테스트 프로젝트와 이와 관련된 일부 테스트 xml 파일이 있습니다. 나는 많은 접근법을 시도했지만 xml 파일을로드 할 수없는 것 같습니다.
작동하지 않는 다음을 시도했습니다.
NSData* nsData = [NSData dataWithContentsOfFile:@"TestResource/TestData.xml"];
NSString* fileString = [NSString stringWithContentsOfFile:@"TestData.xml" encoding:NSUTF8StringEncoding error:&error];
또한 [NSBundle allBundles]를 사용하여 모든 번들을 미리 보려고하면 단위 테스트 번들이 목록에 나타나지 않습니까?
별도의 리소스 번들을 만들려고했지만 빌드 및 배포되었지만 프로그래밍 방식으로 찾을 수없는 것 같습니다.
내가 도대체 뭘 잘못하고있는 겁니까 ?
테스트를 실행할 때 애플리케이션 번들은 여전히 기본 번들입니다. 단위 테스트 번들을 사용해야합니다.
목표 C :
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"TestData" ofType:@"xml"];
NSData *xmlData = [NSData dataWithContentsOfFile:path];
스위프트 2 :
let bundle = NSBundle(forClass: self.dynamicType)
let path = bundle.pathForResource("TestData", ofType: "xml")!
let xmlData = NSData(contentsOfFile: path)
스위프트 3 :
let bundle = Bundle(for: type(of: self))
let path = bundle.path(forResource: "TestData", ofType: "xml")!
let xmlData = NSData(contentsOfFile: path)
신속한 Swift 3에서는 구문 self.dynamicType
이 더 이상 사용되지 않으므로 대신 사용하십시오.
let testBundle = Bundle(for: type(of: self))
guard let ressourceURL = testBundle.url(forResource: "TestData", ofType: "xml") else {
// file does not exist
return
}
do {
let ressourceData = try Data(contentsOf: ressourceURL)
} catch let error {
// some error occurred when reading the file
}
또는
guard let ressourceURL = testBundle.url(forResource: "TestData", withExtension: "xml")
이 답변 에서 언급했듯이 :
단위 테스트 도구가 코드를 실행할 때 단위 테스트 번들은 기본 번들 이 아닙니다 . 애플리케이션이 아닌 테스트를 실행하더라도 애플리케이션 번들은 여전히 기본 번들입니다.
다음 코드를 사용하면 코드가 단위 테스트 클래스가있는 번들을 검색하고 모든 것이 정상입니다.
목표 C :
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"TestData" ofType:@"xml"];
NSData *xmlData = [NSData dataWithContentsOfFile:path];
빠른:
let bundle = NSBundle(forClass: self.dynamicType)
if let path = bundle.pathForResource("TestData", ofType: "xml")
{
let xmlData = NSData(contentsOfFile: path)
}
상대 경로는 현재 작업 디렉토리에 상대적입니다. 기본적으로 / — 루트 디렉토리입니다. 시동 디스크의 루트 수준에서 해당 폴더를 찾고 있습니다.
번들에있는 리소스를 가져 오는 올바른 방법은 번들에 요청하는 것입니다.
응용 프로그램에서 [NSBundle mainBundle]
. 테스트 케이스에서 작동하는지 모르겠습니다. 시도해보고 그렇지 않으면 (반환 nil
되거나 쓸모없는 번들 객체 인 경우) [NSBundle bundleForClass:[self class]]
.
어느 쪽이든 번들이 있으면 리소스의 경로 또는 URL을 요청할 수 있습니다. 경로가 필요한 특별한 이유가없는 한 일반적으로 URL을 찾아야합니다 (예 : NSTask를 사용하여 명령 줄 도구에 전달). URLForResource:withExtension:
리소스의 URL을 가져 오려면 번들에 메시지를 보냅니다.
그런 다음 문자열을 읽을 목적으로 [NSString stringWithContentsOfURL:encoding:error:]
번들에서 가져온 URL을 전달하여을 사용하십시오.
참조 URL : https://stackoverflow.com/questions/19151420/load-files-in-xcode-unit-tests
'IT TIP' 카테고리의 다른 글
Express.js에서 SSL / https를 강제하는 방법 (0) | 2020.12.29 |
---|---|
이동 : 고유 한 경우 추가 (0) | 2020.12.29 |
Babel.js로 Async Await 제안을 트랜스 파일 하시겠습니까? (0) | 2020.12.29 |
PEP8 – sys.path를 사용하여 파일 맨 위에 가져 오지 않음 (0) | 2020.12.29 |
Angular 2의 자식 구성 요소에서 부모 구성 요소 속성 업데이트 (0) | 2020.12.29 |