LRMocky 0.9.1

LRMocky 0.9.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2014年12月

Luke Redpath维护。



LRMocky 0.9.1

  • 作者
  • Luke Redpath

Mocky,Objective-C模拟对象库

Mocky是基于jMock Java库的Objective-C模拟对象库。在构建时考虑了以下目标

  • API尽可能与jMock API匹配
  • 与SenTestCase无缝工作,允许为其他测试框架提供适配器
  • 支持Objective-C块
  • 内置Hamcrest匹配器支持
  • 支持序列和状态

需求

当前,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版本可以在这里找到。