Mocky是基于jMock Java库的Objective-C模拟对象库。在构建时考虑了以下目标
当前,Mocky仅支持在iOS 4.0上构建。目标是产生iOS 4.0和OSX 10.6及以上版本的构建。
尽管Mocky仍可用于为旧系统(包括iOS 3.2的iPad)开发应用程序,但是您的单元测试包的基本SDK需要分别设置为iOS 4.0或OSX 10.6。
由于Mocky依赖于部分用Objective-C++编写的Hamcrest,需要将-lstdc++链接器标志添加到您的测试目标中。
Mocky仍处于开发早期阶段;了解支持哪些功能最好的方式是查看功能测试。以下是一个预期要调用方法的简单示例。
- (void)testSuccessfulMocking
{
LRMockery *context = [LRMockery mockeryForTestCase:self];
id testObject = [context mock:[NSString class] named:@"My Mock String"];
[context checking:^(that){
[[oneOf(testObject) receives] uppercaseString];
}];
[testObject uppercaseString];
[context assertSatisfied];
}
Mock也可以配置为返回值
[context checking:^(that){
[[oneOf(testObject) receives] doSomething]; andThen(returnsObject(@"FOOBAR"));
}];
assertThat([testObject doSomething], equalTo(@"FOOBAR"));
或执行一个块
__block id outsideTheBlock = nil;
[context checking:^(that){
[[oneOf(testObject) receives] uppercaseString]; andThen(performsBlock(^(NSInvocation *invocation) {
outsideTheBlock = @"FOOBAR";
}));
}];
[testObject uppercaseString];
[context assertSatisfied];
assertThat(outsideTheBlock, equalTo(@"FOOBAR"));
此库采用MIT许可证。
如果没有它的贡献者和jMock,这个库将不会存在,所以感谢他们。
还非常感谢Steve Freeman和Nat Pryce出色的大作Growing Object Oriented Software, Guided by Tests,这本书不仅让我接触到了jMock,也是如何有效地使用模拟对象进行TDD的绝佳示例。如果您想提高TDD技能,我强烈建议您购买此书。
书中开发的拍卖应用iOS/Objective-C版本可以在这里找到。