2011-03-28 6 views
12

을 위해 내가 엑스 코드 4 단위 테스트로 새로운 코코아 터치 정적 라이브러리 프로젝트를 생성하고 카테고리 추가 : 인식 할 수없는 선택기 SenTestCase 카테고리

// NSString+Inflections.h 
@interface NSString (Inflections) 
- (NSString *)pluralize; 
@end 

// NSString+Inflections.m 
@implementation NSString (Inflections) 
- (NSString *)pluralize { return self; } 
@end 

다음 내 테스트 케이스에 적절한 import 문을 추가하고 다음과 같은 시험을 썼다 :

- (void)testPluralize 
{ 
    NSString *test = @"person"; 
    NSString *expected = @"people"; 

    NSString *actual = [test pluralize]; 

    STAssertEqualObjects(actual, expected, @"Whoops"); 
} 

그러나,이 '인식 할 수없는 선택기 인스턴스에 보낸'과 (실패하지) 충돌 내 테스트됩니다.

라이브러리 내부의 카테고리를 테스트하려면 어떻게해야합니까?

설명이 부적절한 경우 here 전체 프로젝트를 압축하고 업로드했습니다.

답변

18

나는이 문제에 대한 답을 직접 찾고 있었고 새로운 카테고리 클래스가 프로젝트에 추가 될 때마다 컴파일 소스 목록에 참조를 추가하는 것을 기억할 필요가없는 더 간단한 해결책을 찾았다.

테스트 대상의 빌드 설정에서 연결/기타 링커 플래그 값에 -ObjC을 추가하십시오.

이 오류가 실제로 발생하는 이유에 대한 자세한 설명은 Apple Reference에서 확인할 수 있습니다.

+0

이것은 허용 된 대답이어야합니다. 때로는 한 번 이상 upvote 수 있습니다. –

+0

@Shaggy 죄송합니다. 답을 바꾸지 않았습니다. 방금이 문제를 다시 만났습니다. 그리고 이것은 훨씬 더 나은 해결책입니다. –

+0

나를 위해 작동하지 않습니다 :(정적 라이브러리를 단위 테스트를 작성해야합니다. 코드 컴파일 및 성공적으로 빌드하지만 테스트 사례 실패 인식 할 수없는 선택기. 테스트 대상에 .m 파일을 추가 할 때 작동합니다. –

13

편집 : 단위 테스트 프로젝트를 업로드 파일

+1을 찾지 못하는 경우에 대해 this answer를 참조하십시오. 문제는 테스트 대상에 NSString + Inflections.m이 Build Phases에 포함되어 있지 않다는 것입니다. 엑스 코드에서

4

  1. 이동이 페이즈를 구축하는 목표 아래 네비게이터
  2. 선택 "PoppyTests"의 상단에서 클릭 "양귀비"는
  3. 확장 컴파일 소스
  4. 을 클릭 + sign 다음 NSString + Inflections.m을 추가하십시오.

그런 다음 비슷한

있는 TestSuite '/blahblah/PoppyTests.octest(Tests)가'2011-03-28 21시 31분 34초 0000에서 끝난 다음과 같은 결과를 얻을 수 있습니다. 나는 또한이 테스트 프로젝트의 빌드 페이즈에 필요한 파일을 추가 확인하실 수 있습니다 0.000 (0.002) 초

+3

감사합니다. 문제가 해결되었지만 PoppyTest 타겟에는 양귀비가 종속되어 있습니다. 좀 더 살펴 봤는데 PoppyTest 타겟의 다른 링커 플래그 (Build Settings 아래)에'-all_load '를 추가하여 고정시킬 수 있음을 발견했습니다. 이렇게하면 모든 소스 파일을 두 대상에 모두 추가 할 필요가 없습니다. –

+1

그게 옳지는 않다는 것을 알았습니다. 처음에는 카테고리로 작업했기 때문에 처음에는 '-all_load'문제라고 생각했습니다. 단위 테스트가 아닌 경우'-force_load [dependency name]'을 권합니다. 왜냐하면이 옵션은 지정된 의존성의 모든 심볼 만로드하기 때문입니다. – Joe

+0

감사합니다. 나는 그것을 조사 할 것입니다! –

1

1 개 실패 (예상치 못한 0 )로, 1 개 테스트 실행> 컴파일 소스 컬렉션이 문제를 해결합니다. 무리 감사!

그러나 -all_load 접근 방식을 시도했을 때 _CGSizeZero는 아키텍처 i386에 대해 정의되지 않은 것처럼 여러 가지 오류를 받기 시작했습니다. 내 코드 중 하나에서 CGSizeZero를 사용하는 코드와 같은 일부 코드는 두 번째 방법을 사용할 수 없게 만듭니다.

일단 CGSizeZero를 CGSizeMake (0, 0)로 바꾸면 두 번째 방법이 효과가 좋습니다.

0

Objective-c 프로젝트에서 작업 할 때와 같은 상황이 발생했습니다. 나는 다음 단계를 밟았으며 잘 진행되었다.

1) 프로젝트를 선택하고 대상을 선택하십시오.

2) 테스트 대상을 선택하고 이미지에 표시되는 것처럼 -ObjC을 추가하십시오.

enter image description here

3) 이제 단위 XCTest를 실행 해보십시오.

관련 문제