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


330

存在哪些框架可以对Objective-C代码进行单元测试?我想要一个与Apple Xcode很好地集成的框架。


据我所知,这里的一些答案已经过时了。Apple现在拥有XCTest,可以帮助您解决此问题。我认为大多数答案都需要更新。
亲爱的

Answers:


317

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

回到Xcode的2天,我写了一系列有关如何使用Xcode单元测试执行一些常见任务的网络日志文章:

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

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

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


5
彼得·霍西(Peter Hosey)在12月的加利福尼亚州森林湖(Lake Forest)举行的可可黑德(Cocoaheads)会议上也对可可单元测试做了很好的介绍。这是它的视频:vimeo.com/2725498
格兰特·

1
大约一年前,当我启动iOS时,我发现OCUnit(对我而言)有一个严重的缺点-我无法在模拟器或设备上运行它。从那时起,它可能已经发生了变化-我还没有检查过,但由于这个原因,我一直在使用GHUnit。
drekka 2011年

1
是否有关于此主题的任何官方Apple Developer视频?我经历了2011年和2010年的WWDC,但找不到任何...奇怪,因为测试很重要吗?
罗伯特

4
Xcode单元测试指南链接已移至Xcode单元测试指南
Steven Green

5
Xcode 5现在具有XCTest,它仍然包括OCUnit吗?您是否会使用XCode 5的信息来更新答案?
BrightIntelDusk 2014年

50

查看Gabriel Handford的GHUnit

“ GHUnit的目标是:

在XCode中运行单元测试,使您可以充分利用XCode Debugger。一个简单的GUI,可帮助您可视化测试。显示堆栈跟踪。可通过简单(或不简单)的目标设置作为框架(对于Cocoa应用程序)进行安装;或轻松打包到您的iPhone项目中。”


5
GHUnit +1!我是iPhone开发的新手,可以坦率地说,与OCUnit的噩梦和GTM的轻微偏头痛相比,GHUnit的运行和运行都没有大惊小怪(指令完美)。GHUnit赢得了可用性和便利性!
蒂姆·雷迪

3
请注意,此答案和随附的评论是在一段时间之前编写的。Xcode现在对基于OCUnit的测试提供了更好的支持,从而可以轻松设置测试并在调试器中运行它们。
克里斯托弗·约翰逊

1
此项目此后已弃用。
BigHeadCreations



12

请注意,Mac版Google工具箱(GTM)项目只是扩展/增强了Apple的SenTestingKit框架(它本身基于OCUnit)。正如他们在项目现场所说:

GTM对标准SenTestingKit进行了多项增强,使您可以在iPhone上执行UI单元测试,自动绑定单元测试,日志跟踪和单元测试,以及用于对代码进行静态和动态测试的工具。

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

GTM对用户界面单元测试提供了广泛的支持。它支持测试几乎所有标准Cocoa / UIKit UI对象的图像和/或内部状态,并使您可以轻松地将此支持扩展到自己的UI对象。

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


12

我得出的结论是,GHUnit是Objective-C的最先进的测试框架。我已经在博客上进行了测试框架的综述。就部署(iPhone,模拟器或Mac OS Native)和断言功能而言,它是最灵活的。因为它基于GTM,所以它继承了GTM优于SenTestingKit的所有优点,但还增加了很多其他功能。另一个好处是可以非常积极地维护它。

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


12

我意识到这是一个老问题,但是如果您更喜欢BDD风格的测试(rspec,Jasmine等)而不是xUnit风格的测试(Test :: Unit,JSUnit,JUnit等),那么您可以考虑签出Cedar。由于该语言支持闭包,因此Cedar将BDD风格的测试引入了Objective-C。

我们很高兴在Pivotal Labs的 iOS项目中使用Cedar ,并且我们正在积极进行改进。欢迎您提供任何反馈或建议cedar-discuss@googlegroups.com


10

我还建议使用覆盖率工具,以查看代码的哪些部分包含在单元测试中,哪些没有。基本行和分支代码覆盖范围可以使用GCOV工具生成。如果您想生成不错的HTML覆盖率报告,可以使用LCOVZCOV来完成。










0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.