2012-07-05 2 views
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]; 
    } 
+0

죄송하지만 코드를 이해하지 못합니다. preferencesGeneralUnits는 어디에서 호출 되었습니까? 코드에서 mockSettings에 대한 호출이 없습니다. 어딘가에 여러 가지 글로벌 변수가있는 것 같습니다. 이 경우 모델을 다시 작성하지 않으면 (#if 0의 경우) 모의 객체와 함께 이전 인스턴스를 사용 중이며 0을 반환하는 메소드를 스텁하도록 지시 할 가능성이 있습니다. 반환 할 동일한 메소드 스터 빙 나중에 다른 값은 효과가 없습니다. –

+0

고맙습니다. 네, 이전 인스턴스를 사용하면 항상 이전 기대 값을 반환합니다. 새로운 기대 값을 반환하려면 합당한 새 인스턴스를 사용해야합니다. – jianhua

답변

1

Erik Doernenburg의 설명이 합리적입니다.