首页 > 解决方案 > OCMock:返回与通过参数获取相同的值

问题描述

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

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

该方法的伪声明(objc):

- (id)doSomething:(id)value;

标签: iosobjective-cunit-testingocmock

解决方案


您可以使用 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 的doSomethingWith:方法,TestClass而是调用测试用例中定义的实现,它只返回输入。


推荐阅读