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 将不再调用 TestClass
的 doSomethingWith:
方法,而是调用测试用例中定义的实现,该实现仅 returns 输入。
我在使用 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 将不再调用 TestClass
的 doSomethingWith:
方法,而是调用测试用例中定义的实现,该实现仅 returns 输入。