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

对Objective-C代码进行单元测试的框架是什么?我想要一个框架,很好地集成与苹果Xcode。

75490 次浏览

查看OCUnit。苹果的开发者网络有很棒的介绍

Xcode包含XCTest,它类似于OCUnit,一个Objective-C单元测试框架,并且完全支持在项目构建过程中运行基于XCTest的单元测试。Xcode的单元测试支持在Xcode概述:使用单元测试

回到Xcode 2天,我写了一系列关于如何用Xcode单元测试执行一些常见任务的博客文章:

尽管使用OCUnit而不是XCTest,但概念在很大程度上是相同的。

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

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

我开始使用谷歌工具箱测试iPhone,它的工作对我来说很棒。

google-toolbox-for-mac

Sen:te (Xcode中包含的测试框架的创建者)解释了如何在iPhone项目:simple-iphone-ipad-unit-test中使用OCUnit。

查看Gabriel Handford的GHUnit:

GHUnit的目标是:

运行XCode中的单元测试,允许 你要充分利用XCode 调试器。一个简单的GUI来帮助你 想象你的考试。显示堆栈 痕迹。作为框架可安装 (对于Cocoa应用程序)使用简单的(或 不是)目标设置;或易于包装 进入你的iPhone项目。" < / p >

注意,谷歌Toolbox for Mac (GTM)项目只是扩展/增强了苹果的SenTestingKit框架(它本身基于OCUnit)。就像他们在项目网站上说的:

GTM对 标准的SenTestingKit允许你 做UI单元测试,自动绑定 单元测试、日志跟踪和单元 在iPhone上进行测试 做静态和动态的工具

请注意以下关于用户界面测试的注释:

GTM对用户有广泛的支持 接口单元测试。它支持 同时测试成像和/或 内部状态几乎都有了 标准Cocoa/UIKit UI对象,以及 让你很容易扩展它

有关如何使用它的说明,请参阅他们的“代码验证和单元测试”页面。

我还建议使用覆盖工具来查看单元测试覆盖了代码的哪些部分,哪些部分没有。基本的行和分支代码覆盖可以用GCOV工具生成。如果你想生成漂亮的HTML覆盖报告,有LCOVZCOV可以做到这一点。

我推荐gh-unit,它有一个很好的测试结果的GUI。

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

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

我已经进行了将OCMock集成到GHUnit的努力,它工作得很好!你可以在github上得到代码。

Cocoa with Love的Matt Gallagher有一个关于单元测试的非常好的文章

我使用SimpleUnitTest工作与iPhone和iPad lib。

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

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

您可以将其放入活动项目中,并在3分钟(或更短时间)内开始添加单元测试。

单元测试支持绑定在xcode中(它的简单设置)结合ocrunner(一些自动测试/咆哮的好处)是目前我最喜欢的Obj-C单元测试设置。

我知道这是一个老问题,但如果你更喜欢bdd风格的测试(rspec, Jasmine等)而不是xunit风格的测试(Test::Unit, JSUnit, JUnit等),那么你可以考虑检查雪松。既然Objective-C语言支持闭包,那么Cedar就为Objective-C带来了bdd风格的测试。

我们很高兴在关键的实验室的iOS项目中使用Cedar,并且我们正在积极地改进它。任何反馈或建议都欢迎访问cedar-discuss@googlegroups.com

我建议你看看Kiwi,一个开源的iOS BDD测试框架: 猕猴桃 < / p >

检查项目的WIKI开始或获得Daniel Steinberg的书“Test Driving iOS Development with Kiwi” test-driving-ios-development < / p >

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

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