테스트 내에서 실행 중인지 여부를 알고 싶은 것이 완전히 합법적이라고 생각합니다. 이것이 도움이 될 수있는 여러 가지 이유가 있습니다. 예를 들어 테스트를 실행할 때 App Delegate의 application-did / will-finish-launching 메서드에서 일찍 돌아와서 단위 테스트와 관련이없는 코드에 대해 테스트를 더 빠르게 시작합니다. 그러나 다른 여러 가지 이유로 순수한 "논리적"테스트를 수행 할 수 없습니다.
위의 @Michael McGuire가 설명한 뛰어난 기술을 사용했습니다. 그러나 Xcode 6.4 / iOS8.4.1에서 작동하지 않는 것으로 나타났습니다 (아마도 더 빨리 중단되었을 것입니다).
즉, 내 프레임 워크에 대한 테스트 대상 내에서 테스트를 실행할 때 더 이상 XCInjectBundle이 표시되지 않습니다. 즉, 프레임 워크를 테스트하는 테스트 대상 내에서 실행 중입니다.
따라서 @Fogmeister가 제안하는 접근 방식을 활용하여 각 테스트 체계는 이제 확인할 수있는 환경 변수를 설정합니다.
그런 다음 APPSTargetConfiguration
이 간단한 질문에 답할 수있는 라는 클래스에 대한 몇 가지 코드 가 있습니다.
static NSNumber *__isRunningTests;
+ (BOOL)isRunningTests;
{
if (!__isRunningTests) {
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
NSString *isRunningTestsValue = environment[@"APPS_IS_RUNNING_TEST"];
__isRunningTests = @([isRunningTestsValue isEqualToString:@"YES"]);
}
return [__isRunningTests boolValue];
}
이 접근 방식의 한 가지주의 사항은 XCTest에서 허용하는 것처럼 기본 앱 체계에서 테스트를 실행하면 (즉, 테스트 체계 중 하나를 선택하지 않음)이 환경 변수 집합을 얻지 못한다는 것입니다.