2012-01-10 2 views
4

저는 Xcode 4.2에서 iPhone 5.0 프로젝트를 만들고 있으며 단위 테스트가 실행될 때 코드 적용 범위를 찾고 싶습니다. 나는 Xcode 환경에 대해 아주 익숙하다. 그리고 나는 here 단계를 따라왔다. 테스트 대상의 빌드 설정을 올바르게 수정하고 "libprofile_rt.dylib"파일을 잘 링크 할 수 있습니다.Xcode 4.2에서 코드 커버리지를 볼 수 없습니다

이 시점에서 (Command-U를 사용하여) 테스트를 실행하면 코드가 컴파일되고 테스트가 통과됩니다. 나는 here이라고 기술 된 문제를 만나지 않는다. 또한 CoverStory을 설치했습니다.

첫 번째 링크의 저자는 "Just run your unit tests and view the code coverage data as usual"; 그러나 .../Objects-normal/i386을 찾을 수 없습니다.

#import "SomeClass.h" 

@implementation SomeClass 
@synthesize someValue; 

-(void)performWork:(BOOL)now withValue:(int)value { 
    if (now) { 
     someValue = value; 
    } 
    else { 
     someValue = value - 1; 
    } 
} 

@end 

및 테스트 클래스 :

그냥 내가 다음 클래스와 함께 새로운 프로젝트를 만들어 가지 작업을 진행하는 이상적

#import "CodeCoverageTests.h" 
#import "SomeClass.h" 

@implementation CodeCoverageTests 

- (void)testExample { 
    SomeClass *obj = [[SomeClass alloc] init]; 
    [obj performWork:YES withValue:3]; 
    STAssertEquals(obj.someValue, 3, @"Value was not 3"); 
} 
@end 

, 나는 어떤 방법으로 통지하고 싶습니다 테스트가 실행될 때 performWork 메서드의 else 절이 절대로 실행되지 않습니다. 나는 새로운 컴파일러와 함께 할 노력하고있어에 대한 지원이 없다는 것을 근본 문제가

  1. 인가 :

    나는 따라서 다음과 같은 질문이?

  2. 위의 링크 된 질문에 대한 응답으로 user chown으로 설명하는 유일한 솔루션입니까?
  3. 2)의 해결 방법을 수행하면 CoverStory (또는 이와 비슷한)를 사용할 수 있습니까?

는 업데이트 : 어떤 투쟁 후 , 나는 마지막으로 "SomeClass.gcno"와 "SomeClass.gcda"파일 (감사 @bjhomer - this link 참조)의 위치를 ​​찾을 수 있었고, 그들은 performWork에있는 조건문의 if 부분이 커버되었고 (else은 아니 었음) 아름답게 묘사했습니다.

- (void)testExample 
{ 
    SomeClass *obj = [[SomeClass alloc] init]; 
    [obj performWork:NO withValue:3]; 
    STAssertEquals(obj.someValue, 2, @"Value was not 2"); 
} 

다시 건물과 유닛 테스트를 다시 실행 한 후, 나는 .gcno 및 .gcda 파일을 다시로드 다음과 같이 확인하기 위해, 나는 테스트를 수정했습니다. CoverStory는 적용 범위가 performWork 메서드의 else 부분으로 변경되었음을 나타냅니다. 하나 개의 작은주의 그러나이 있었다 :

  1. 내가 만든 될 "SomeClass.gcno"와 "SomeClass.gcda"파일을 위해 (도시 here로하지 <TargetNameTest>)에 <TargetName>의 빌드 설정을 수정할 필요 ...<TargetName>.build/Objects-normal/i386/ 디렉토리에 있습니다.

다시 도움 주셔서 감사합니다.

답변

1

주요 문제인 것처럼 들리 겠지만 Build/Intermediates/<SchemeName>.build/<ConfigurationName>-<PlatformName>/<TargetName>.build/Objects-normal/<ArchitectureName> 디렉토리를 찾을 수 없습니다. 그 디렉토리는 코드 범위에 관계없이 빌드 할 때 항상입니다.컴파일러에서 생성 된 모든 중간 파일이 저장되는 곳이며 코드 범위를 수행하는 경우 최종 .gcno.gcda 파일이 있어야합니다. 해당 디렉토리를 찾을 수 없으면 문제는 범위와 관련이 없으며 문제는 해당 디렉토리를 찾아야한다는 것입니다.

질문에 답변하십시오.

  1. 코드 범위는 Xcode 4.2부터 LLVM 컴파일러에서 지원됩니다. LLVM-GCC에서는 작동하지 않으므로이를 사용하지 않도록하십시오.
  2. 아니요, Xcode 4.2에서 GCC 4.2에 대한 지원을 해킹 할 필요가 없습니다. Xcode 4.2에서 코드 커버리지를 실행 중입니다. 위의 어느 것도 수행하지 않았습니다.
  3. CoverStory를 어느 방향 으로든 사용할 수 있어야합니다. GCC 4.2 지원에 대한 해킹은 내장 된 제품이 바뀌는 곳에서 바뀌지 않을 것입니다.
+0

응답 해 주셔서 감사합니다. 나는 [이 응답] (http://stackoverflow.com/a/4282467/800788)에서 파일을 찾기 위해 _how_을 (를) 찾을 수있었습니다. – Meesh

관련 문제