1
#if 0 ... # endif를 참조하십시오. 활성화 된 경우 mock이 예상대로 작동하고, 메소드 preferencesGeneralUnits를 호출 할 때 1을 반환하고, 비활성화 된 경우 모의 객체는 이전 값 0을 반환합니다.OCMock과 동일한 모의 인스턴스, 예기치 않은 반환 값을 기반으로 다른 값을 반환합니다.
제 질문은 OCMock 버그입니까? 아니면 OCMock의 사용법이 기대 되는가? 고맙습니다.
2.0.1 및 최신 소스 코드 모두에 적합하지 않습니다.
미리 감사드립니다.
- (void) testFormattedDistanceValueWithMeters{
id mockSettings = [OCMockObject mockForClass:[TnSettings class]];
id mockClientModel = [TnClientModel createMockClientModel];
[[[mockClientModel stub] andReturn:mockSettings] settings];
[[[mockSettings stub] andReturn:[NSNumber numberWithInt:0]] preferencesGeneralUnits];
NSNumber *meters = [NSNumber numberWithDouble:0.9];
distance = [NSString formattedDistanceValueWithMeters:meters];
STAssertEqualObjects(distance, @"0.9", @"testformattedEndTimeForTimeInSeconds failed");
//--------------See here---------------------
#if 0
mockSettings = [OCMockObject mockForClass:[TnSettings class]];
mockClientModel = [TnClientModel createMockClientModel];
[[[mockClientModel stub] andReturn:mockSettings] settings];
#endif
[[[mockSettings stub] andReturn:[NSNumber numberWithInt:1]] preferencesGeneralUnits];
meters = [NSNumber numberWithDouble:1];
distance = [NSString formattedDistanceValueWithMeters:meters];
STAssertEqualObjects(distance, @"3.3", @"testformattedEndTimeForTimeInSeconds failed");
[TnClientModel releaseInstance];
}
죄송하지만 코드를 이해하지 못합니다. preferencesGeneralUnits는 어디에서 호출 되었습니까? 코드에서 mockSettings에 대한 호출이 없습니다. 어딘가에 여러 가지 글로벌 변수가있는 것 같습니다. 이 경우 모델을 다시 작성하지 않으면 (#if 0의 경우) 모의 객체와 함께 이전 인스턴스를 사용 중이며 0을 반환하는 메소드를 스텁하도록 지시 할 가능성이 있습니다. 반환 할 동일한 메소드 스터 빙 나중에 다른 값은 효과가 없습니다. –
고맙습니다. 네, 이전 인스턴스를 사용하면 항상 이전 기대 값을 반환합니다. 새로운 기대 값을 반환하려면 합당한 새 인스턴스를 사용해야합니다. – jianhua