你如何单元测试Objective C代码? (苹果手机)
在其他语言(如java和.Net)中,您可以使用依赖注入,以便能够在当前代码中进行单元测试并传递模拟对象 . 但是,我无法为目标c找到可靠的依赖注入框架 .
假设你想为下面的代码编写一个单元测试,你怎么能模拟MyObject?
- (void) methodToBeTested
{
NSString str = @"myString";
MyObject object = [[MyObject alloc] init];
[object setString:str];
[object doStuff];
[object release];
}
这就是我如何通过依赖注入来做到这一点 . 是否有类似的方法在目标c上实现这一目标?
@Inject MyObject object;
public void methodToBeTested()
{
String str = "myString";
// object is automatically instantiated (Dependency Injection)
object.setString(str);
object.doStuff();
}
3 回答
在目标c中,控制反转仍然是可行的 . 您当然可以设计基于构造函数或基于属性的依赖注入的类,但我认为您不会像以前那样找到基于注释的依赖注入框架 .
我已经看到了为objective-c构建依赖注入框架的几种不同方法,包括https://github.com/mivasi/Objective-IOC,但我不能评论它们的成熟度或实用性 .
对于对象模拟和存根,请查看OCMock .
去测试:
正如@Jonah的回答中提到的那样,使用优秀的OCMock . 唐't bother trying to do capital-D, capital-I Dependency Injection in obj-c, it'更多的工作而不是它的 Value .
这是Objective-C的依赖注入框架:http://www.typhoonframework.org
除了解决DI的设计方面外,它还非常注重能够为 生产环境 与测试场景(集成测试)配置组件 . 这包括:
能够注入表示为字符串的值 - 这些值在运行时转换为所需的类型 .
通过外部属性文件进行配置管理 .
异步测试执行 - 允许您测试在后台线程上运行的方法 .