关于cocoa:什么是单元测试Objective-C代码的最佳方法?

What is the best way to unit test Objective-C code?

单元测试目标C代码有哪些框架?我想要一个与苹果XCODE完美结合的框架。


Xcode包括XCEST,它类似于Objective-C单元测试框架ocUnit,它完全支持作为项目构建过程的一部分运行基于XCEST的单元测试。xcode的单元测试支持在xcode概述:使用单元测试中进行了描述。

回到Xcode2天,我写了一系列关于如何使用Xcode单元测试执行一些常见任务的日志:

  • Cocoa框架的单元测试
  • 调试cocoa框架单元测试
  • 可可应用单元测试
  • 调试Cocoa应用单元测试

尽管使用了ocunit而不是xctest,但概念基本相同。

最后,我还写了一些关于如何为Cocoa用户界面编写测试的文章;Cocoa的结构使得它相对简单,因为在大多数情况下,您不必旋转事件循环或类似的东西。

  • 信任,但要核实。
  • 单元测试Cocoa用户界面:目标操作
  • 单元测试Cocoa用户界面:Cocoa绑定

这使得不仅可以为模型级代码,还可以为控制器级甚至视图级代码进行测试驱动开发成为可能。


查看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."


我开始使用谷歌的iPhone工具箱测试平台,这对我来说非常有用。

Mac版谷歌工具箱


检查一下眼科。苹果的开发者网络有一个很好的介绍。


我得出的结论是GHUnit是Objective-C最先进的测试框架。我在我的博客上做了一个测试框架的汇总。在部署(iPhone、模拟器或Mac OS本机)和断言功能方面,它是最灵活的。因为它基于GTM,它继承了GTM相对于SentingKit的所有优势,但也增加了更多的优势。另一个好处是它得到了非常积极的维护。

我已经努力将ocmock集成到GHUnit中,效果很好!。您可以在Github上获取代码。


我知道这是一个古老的问题,但是如果您喜欢BDD风格的测试(rspec、jasmine等)而不是XUnit风格的测试(test::Unit、JSUnit、JUnit等),那么您可以考虑查看Cedar。Cedar将BDD风格的测试引入到Objective-C中,因为该语言支持闭包。

我们很高兴地将Cedar用于关键实验室的iOS项目,我们正在积极改进它。欢迎在[email protected]上提供任何反馈或建议。


请注意,Google Toolbox for Mac(GTM)项目只是扩展/增强了苹果的SentingKit框架(即,它本身基于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。


Sen:te(Xcode中包含的测试框架的创建者)解释了如何将ocUnit用于iPhone项目:简单的iPhone iPad单元测试。


我推荐GH单元,它有一个很好的测试结果图形用户界面。

http://github.com/gabriel/gh-unit/tree/master


Xcode中捆绑的单元测试支持(对于它的简单设置)和OCrunner(对于某些自动测试/咆哮的好处)是目前我最喜欢的OBJ-C单元测试设置。


这里有很多

列出目标C中的单元测试框架


MattGallagher的CocoaWithLove在单元测试方面有一篇很好的文章。


我建议研究Kiwi,一个面向iOS的开源BDD测试框架:几维鸟

查看该项目的wiki以启动或获取丹尼尔·斯坦伯格的书"用Kiwi测试iOS开发"。试驾iOS开发


我使用SimpleUnitTest与iPhone和iPad libs配合使用。

http://cbess.blogspot.com/2010/05/simple-iphone-ipad-unit-test.html

它附带了一个单元测试Xcode模板,可以轻松地添加单元测试类。包装GTM。

你可以直接把它放到一个活动的项目中,并在3分钟(或更短)内开始添加单元测试。


SPECTA是一个现代TDD(测试驱动开发)/BDD(行为驱动开发)框架,运行在XCEST之上。它支持iOS和Mac OS X项目的单元测试。


我希望你能使用"Sentestkit",从中你可以测试每一种方法。