2009-10-23 5 views
4

출력이 NSDate의 timeIntervalSinceNow 반환 값에 의존하는 메서드에 대한 테스트를 작성하려고합니다. 내 테스트에서 반환 값을 지정하여 특정 시나리오를 테스트 할 수 있습니다.OCMock 반환 값

저는이 OCMock 객체를 얻는 데 어려움을 겪고 있습니다. 내 코드는 다음과 같습니다.

id mock = [OCMockObject mockForClass:[NSDate class]]; 
NSTimeInterval t = 20.0; 
[[[mock stub] andReturnValue:OCMOCK_VALUE(t)] timeIntervalSinceNow]; 
STAssertEquals([mock timeIntervalSinceNow], 20.0, @"Should be eql."); 

이렇게하면 'typeof'오류가 발생하기 전에 예상되는 한정자 한정자 목록이 생성됩니다.

의견이 있으십니까? ObjC에 익숙하지 않아 다른 관련 팁도 크게 감사하겠습니다.

감사합니다.

답변

5

사실 OCMock 오류가 아니라 컴파일러 오류입니다. 이 매크로는 OCMOCK_VALUE(t) 매크로 작동 방식과 관련이 있습니다.

#define OCMOCK_VALUE(variable) [NSValue value:&variable withObjCType:@encode(typeof(variable))] 

대해서 typeof() 지시어는 C89의 일부가 아닌, 그래서 당신이 사용하는 컴파일러를 설정했는지 확인 - std=gnu89 또는 std=gnu99 플래그 : 그것은으로 정의된다. Apple docs에 따르면, Compiler Default으로 설정하면 이것은 gnu89와 동일합니다. 괜찮습니다.

이것은 아마도 오류의 원인 일 수 있습니다.

+0

이것은 대상 빌드 속성의 GCC_C_LANGUAGE_STANDARD에 의해 정의됩니까? 그렇다면, 내 단위 테스트 번들은 이미 값으로 C99를가집니다. 이것이 차이를 만드는 경우 Xcode 3.1.4 iPhone 앱용입니다. –

+1

죄송합니다. 잘못되었습니다. GNU99로 설정해야합니다. –

+0

그게 효과가! 고맙습니다. –