OCMock: return 与参数获取的值相同

OCMock: return the same value as get by parameter

我在使用 OCMock 框架编写单元测试时遇到了一些具体问题。

假设我有一些带有一个参数的方法。我需要的是存根该方法并取回相同的值。该值是计算出来的,所以我不能仅通过通常的存根 return 一些预定义值。

该方法(objc)的伪声明:

- (id)doSomething:(id)value;

您可以使用 OCMock 的 Method Swizzling 功能:

@implementation OCmockPlaygroundTests

- (void)testStub{

    TestClass * mockObject = OCMPartialMock([TestClass new]);

    OCMStub([mockObject doSomethingWith:OCMOCK_ANY]).andCall(self, @selector(doSomethingWith:));
    NSString * testInput = @"TEST_INPUT";
    NSString * result = [mockObject doSomethingWith:testInput];
    XCTAssertTrue([testInput isEqualToString:result]);
}

- (NSString *)doSomethingWith:(NSString *)input{
    return input;
}

@end

OCMock 将不再调用 TestClassdoSomethingWith: 方法,而是调用测试用例中定义的实现,该实现仅 returns 输入。