OCMock只有一次有效,奇怪,为什么?或者我身边有什么问题?

jia*_*hua 3 ocmock

我想为TnSettings做模拟,是的,如果代码通过以下方法工作,问题是我们需要为每个案例编写模拟代码,如果我们只模拟一次然后执行多个case,那么第二个将报告例外.我使用最新的OCMock V2.01.

我的问题是为什么OCMock有这样的限制?或者我不能正确使用它?

任何想法或讨论将不胜感激,提前感谢.

- (void) testFormattedDistanceValueWithMeters {         
        mockSettings = [OCMockObject mockForClass:[TnSettings class]];
        mockClientModel = [TnClientModel createMockClientModel];
        [[[mockClientModel expect] andReturn:mockSettings] settings];
        [[[mockSettings expect] andReturn:[NSNumber numberWithInt:0]] preferencesGeneralUnits];

        NSNumber *meters = [NSNumber numberWithDouble:0.9];
        distance = [NSString formattedDistanceValueWithMeters:meters];
        STAssertEqualObjects(distance, @"0.9", @"testformattedEndTimeForTimeInSeconds failed");

        //------------- Another case -----------------
        mockSettings = [OCMockObject mockForClass:[TnSettings class]];
        mockClientModel = [TnClientModel createMockClientModel];
        [[[mockClientModel expect] andReturn:mockSettings] settings];
        [[[mockSettings expect] andReturn:[NSNumber numberWithInt:0]] preferencesGeneralUnits];

        meters = [NSNumber numberWithDouble:100.9];
        distance = [NSString formattedDistanceValueWithMeters:meters];
        STAssertEqualObjects(distance, @"101", @"testformattedEndTimeForTimeInSeconds failed");
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*urg 5

我不确定我完全理解你的问题或你的代码.我怀疑你偶然发现了期望存根之间的区别.

这是你的想法吗?

- (void) testFormattedDistanceValueWithMeters {         
    mockSettings = [OCMockObject mockForClass:[TnSettings class]];
    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");

    meters = [NSNumber numberWithDouble:100.9];
    distance = [NSString formattedDistanceValueWithMeters:meters];
    STAssertEqualObjects(distance, @"101", @"testformattedEndTimeForTimeInSeconds failed");
Run Code Online (Sandbox Code Playgroud)

}

  • 当您使用expect时,您将指定精确的合约.如果你想说这个方法应该调用两次,那么你必须调用expect两次.其他模拟框架提供了实现此目的的便捷方法.有一天我会把它添加到OCMock,不知怎的,就像[[[mockSettings expect] times:2] someMethod]. (2认同)