2011-12-15 1 views
8

키위 테스트를 빌드하고 설명 할 수 없다는 경고를받습니다. 나는 키위가 처음이다. Kiwi Spec 단위 테스트 : 인스턴스 메소드 '-attachToVerifier : verifier :'을 찾을 수 없음

id conversationMock = [KWMock mockForProtocol:@protocol(Conversation)]; 
[conversationMock stub:@selector(end)]; 

그리고 내 컨트롤러에서

, 속성이 소위 "대화":

@interface MyController() 
@property (nonatomic, assign) id<Conversation> conversation; 
@end 

모의은 사양 I에 다음의 속성에 할당됩니다

나는 모의 객체 설정을 가지고 대화에 "end"메서드가 호출되었는지 확인하십시오.

it(@"should end conversation", ^{ 
    [[[myController.conversation] should] receive] end]; 
    [myController stopTalking]; 
}); 

컴파일러 (LLVM 3. 0)가 경고를 표시합니다. "인스턴스 메소드 '-attachToVerifier : 검증 자 :'찾을 수 없음 '

이 원인은 무엇입니까? 이 문제를 해결해야합니까?

[[(NSObject의 *) myController.conversation] 수신한다] 끝 :

답변

12

경고의 못된 NSObject의에 ID를 타입 캐스팅 (끝이 확인 작업에 테스트 확인을 실행 메서드 호출을 확인) ];

+0

같은 문제가있어이 문제가 해결되었다. 그러나 그것을 해결할 다른 방법은 없을까요? 키위가 다른 테스트 프레임 워크보다 읽기 쉬운 이점을 파괴합니다. – Sunkas

+0

나는 키위가 아직도 마음에 든다. 나는 지난 6 개월 동안 많이 사용 해왔고 가끔씩 만이 문제를 겪었다. 이 사람이 널 실망 시키게하지 마라. –

+1

실제로 idr을 발생 시켰고 컴파일하지 않는다는 것을 제외하고는 id 형의 객체를 검증하려고 할 때 이것을 발견했습니다. 'NSObject * '에 던지기는 트릭을 만들었지 만 추한 것입니다. –

9

당신이해야 할 것은 :

build settings -> Other Linker flags 

가 플래그를 추가 -all_load

+0

이 응답을 upvote하고 싶습니다만, 이것이 필요한 이유를 설명해 주시겠습니까? – avelis

+1

-attachToVerifier : verifier : 파일 NSObject + 파일의 NSObject에있는 카테고리에 정의 됨 KiwiVerifierAdditions - (id) attachToVerifier : (id ) aVerifier;
-attachToVerifier : verifier :는 컴파일 할 때 표시되므로 응용 프로그램이 정상적으로 컴파일됩니다. LLVM에 대한 경고는 캐스팅 ID로 인한 것임 <-> NSObject 내가 아는 한, Objective-C 링커는 범주 만 포함하는 개체를로드하지 않습니다. -all_load 링커가 기존의 모든 오브젝트 파일을 강제로로드하도록하여 결국 attachToVerifier가있는 오브젝트 파일을로드합니다. 희망이 있습니다. – Komposr

+0

먼저 Objective-C 코드로 객체 파일에서로드 만 강제 실행하는'-ObjC'를 시도하십시오. 이 플래그는 작업에 사용되지 않았고'-all_load'는 해결 방법이었습니다 (Apple TN QA1490 참조). (나는 OP의 오류가 있었고이 대답은 내 기억을 뒤집어 놓았고, 나는'-ObjC'을 시도하고 문제를 해결했다.) –

1

@ Komposr의 대답에 기반을, 나는 뉴질랜드 내 프로젝트의 몇 쳐다 보면서 내가 할 필요가 있다고 발견 다음

빌드 설정 -> 기타 링커 플래그

,536 내가 CocoaPods를 사용하지 임을 -ObjC

:

는 플래그를 추가합니다. 나는 키위를 내가 포함하고있는 정적 라이브러리로 다운로드하고 컴파일했다. ...

관련 문제