2011-05-06 4 views
1

URL이 nil이면 매개 변수로 nil을 사용하여 대리자 메서드가 호출되는지 확인하기 위해 대리자 개체의 모의 개체를 설정합니다.OCMock은 매개 변수가 예상치 못한 경우 NSInternalInconsistencyException을 throw합니다.

FileDownloadOperation이 예상대로 동작하면 테스트가 통과합니다.

FileDownloadOperation이 대리자 메서드를 호출하지 않으면 테스트가 예상대로 실패합니다.

그러나 FileDownloadOperation 대신, 테스트 충돌 실패의, nil보다는 다른 뭔가 위임 메서드를 호출하고 OCMock가 발생하기 때문에 다른 테스트가 실행되지 않을 때 :

'NSInternalInconsistencyException'이유 : 'OCMockObject [FileDownloadOperationTest] 예상치 못한 방법 호출 : 데이터 : <> forURL :

-(void) testNilURL{ 
     // 1. Create an operation 
     FileDownloadOperation * anOp = [[FileDownloadOperation alloc]init]; 
     // 2. set a nil URL 
     anOp.URL = nil; 
     // 3. set a mock delegate 
     id mockDelegate = [OCMockObject mockForClass:[self class]]; 
     [[mockDelegate expect] data:[OCMArg isNil] forURL:[OCMArg isNil]]; 
     anOp.delegate = mockDelegate; 
     // 4. launch operation 
     [anOp main]; 
     // 5. ASSERT mock delegate is called with nil data 
     STAssertNoThrow([mockDelegate verify], @"Delegate should be called with nil data and nil URL"); 
     [anOp release]; 
    } 

전무는 예상되는 행동인가? 아니면 내가 잘못하고있는거야? 덕분에 !

+0

이 아이폰 OS 5.0 시뮬레이터에 해결되었다, 지금 OCMock는 단순히 테스트 실패를보고합니다. – yonix

답변

4

OCMock은 보고서 불일치에 대한 예외를 throw하고 OCUnit이 예외를 포착하여보고하도록 트러스트합니다. 그러나 due to a bug in the iOS Simulator, 단위 테스트는 예외를 catch 할 수 없으므로 간단히 중단됩니다.

(나는 현재 예외에 의존하지 않음으로써이 문제를 해결 작동하는 새로운 조롱 프레임 워크를 쓰고 있어요.)