我正在使用OCMock在iOS上进行模拟。我编写了一个简单的模拟单元测试,该测试根据我设定的期望通过时会失败。

这是代码:

// Scientific Calculator class
@implementation ScientificCalculator

- (NSNumber *)sqrt:(NSNumber *)input {
    return [NSNumber numberWithDouble:sqrt([input doubleValue])];
}

@end

// unit test
-(void) testScientificCalculatorSqrt {

    NSNumber *input = [NSNumber numberWithDouble:4];
    ScientificCalculator *scientificCalculator = [[ScientificCalculator alloc] init];

    NSNumber *expected = [NSNumber numberWithDouble:2];

    NSNumber *result = [scientificCalculator sqrt:input];

    STAssertEquals([result doubleValue], [expected doubleValue], nil);

}

// unit test
-(void)testScientificCalculatorMocking {

    // setup
    NSNumber *input = [NSNumber numberWithDouble:44];
    id scientificCalculator = [OCMockObject mockForClass:[ScientificCalculator class]];

    // expect
    NSNumber *expected = [NSNumber numberWithDouble:2];
    [[[scientificCalculator expect] andReturn:expected] sqrt:input];

    // test
    NSNumber *result = [scientificCalculator sqrt:input];

    // verify
    STAssertEquals([result doubleValue], [expected doubleValue], nil);

    [scientificCalculator verify];
}


testScientificCalculatorMocking单元测试使用44作为sqrt的输入。我将期望值设置为2STAssertEquals[scientificCalculator verify]均成功通过。

有人可以在这里解释我做错了吗?

谢谢,
道格

最佳答案

您已经告诉模拟程序在用44(expected)调用sqrt时返回2(input)。因此,result变量将包含值2。然后,将比较将通过的result(2)和expected(2)。

09-25 17:32
查看更多