对Objective-C代码进行单元测试的最佳方法是什么?
存在哪些框架可以对Objective-C代码进行单元测试?我想要一个与Xcode很好地集成的框架。
解决方案
回答
签出OCUnit。苹果的开发者网络有很好的介绍。
回答
Xcode包含XCTest,它类似于OCUnit(一个Objective-C单元测试框架),并且完全支持运行基于XCTest的单元测试,这是项目构建过程的一部分。 Xcode概述:使用单元测试中介绍了Xcode的单元测试支持。
回到Xcode的2天,我写了一系列关于如何使用Xcode单元测试执行一些常见任务的网络日志文章:
- 单元测试可可框架
- 调试Cocoa框架单元测试
- 单元测试可可应用
- 调试Cocoa应用程序单元测试
尽管使用OCUnit而不是XCTest,但这些概念在很大程度上是相同的。
最后,我还写了几篇关于如何为Cocoa用户界面编写测试的文章。可可的结构方式使其相对简单,因为在大多数情况下,我们不必旋转事件循环或者类似的事情。
- 信任但要验证。
- 单元测试可可用户界面:Target-Action
- 单元测试Cocoa用户界面:Cocoa绑定
这使得不仅可以对模型级代码而且还可以对控制器级甚至视图级代码进行测试驱动的开发。
回答
我开始使用适用于iPhone的Google工具箱测试平台,并且对我来说非常有用。
google-toolbox-for-mac
回答
Sen:te(Xcode附带的测试框架的创建者)介绍了如何将OCUnit与iPhone项目结合使用:simple-iphone-ipad-unit-test。
回答
查看Gabriel Handford的GHUnit:
"The goals of GHUnit are: Runs unit tests within XCode, allowing you to fully utilize the XCode Debugger. A simple GUI to help you visualize your tests. Show stack traces. Be installable as a framework (for Cocoa apps) with a simple (or not) target setup; or easy to package into your iPhone project."
回答
请注意,Mac版Google工具箱(GTM)项目只是扩展/增强了Apple的SenTestingKit框架(其本身基于OCUnit)。正如他们在项目现场所说:
GTM has several enhancement to the standard SenTestingKit allowing you to do UI unit testing, automated binding unit testing, log tracking, and unit testing on the iPhone, as well as tools for doing static and dynamic testing of your code.
请注意有关用户界面测试的以下注释:
GTM has extensive support for user interface unit tests. It supports testing both the imaging and/or internal state of almost all of the standard Cocoa/UIKit UI objects, and makes it easy for you to extend this support to your own UI objects.
有关如何使用它的说明,请参见其"代码验证和单元测试"页面。
回答
我还建议我们使用覆盖率工具,以查看代码的哪些部分包含在单元测试中,哪些没有。基本行和分支代码覆盖范围可以使用GCOV工具生成。如果我们想生成漂亮的HTML覆盖率报告,可以使用LCOV和ZCOV来完成。
回答
我推荐gh-unit,它具有用于测试结果的漂亮GUI。
http://github.com/gabriel/gh-unit/tree/master
回答
我得出的结论是GHUnit是Objective-C的最先进的测试框架。我已经在博客上进行了测试框架的综述。就部署(iPhone,模拟器或者Mac OS Native)和断言功能而言,它是最灵活的。因为它基于GTM,所以它继承了GTM优于SenTestingKit的所有优点,但还增加了很多其他功能。另一个好处是可以非常积极地维护它。
我已经尽力将OCMock集成到GHUnit中,效果很好!我们可以在github上获取代码。
回答
《可可与爱》的马特·加拉格尔(Matt Gallagher)在单元测试上有一篇很好的文章。
回答
我使用SimpleUnitTest与iPhone和iPad库一起使用。
http://cbess.blogspot.com/2010/05/simple-iphone-ipad-unit-test.html
它带有单元测试Xcode模板,可以轻松添加单元测试类。包装GTM。
我们可以从字面上将其放到活动项目中,并在3分钟(或者更短的时间内)内开始添加单元测试。
回答
目前,我最喜欢的Obj-C单元测试设置是xcode中捆绑的单元测试支持(用于简单设置)和ocrunner(用于某些自动测试/ Growl优点)捆绑在一起。
回答
我意识到这是一个老问题,但是如果我们更喜欢BDD风格的测试(rspec,Jasmine等)而不是xUnit风格的测试(Test :: Unit,JSUnit,JUnit等),那么我们可以考虑签出Cedar 。由于该语言支持闭包,因此Cedar将BDD风格的测试引入了Objective-C。
我们很高兴在Pivotal Labs的iOS项目中使用Cedar,并且我们正在积极进行改进。如有任何反馈或者建议,请发送电子邮件至[email protected]。