2012-07-05 75 views
1

見的#if 0 ...#ENDIF,如果能夠再模擬正常工作,調用方法時preferencesGeneralUnits返回1,如果禁用然後模擬仍返回前值0,儘管我們要求他返回1OCMock和返回不同的值基於相同的模擬實例,意想不到的返回值。

我的問題是,它是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的解釋是合理的。