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

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

提问人:Kim 提问时间:8/29/2008 最后编辑:Jack BashfordKim 更新时间:3/6/2019 访问量:76196

问:

存在哪些框架来对 Objective-C 代码进行单元测试?我想要一个与 Apple Xcode 完美集成的框架。

Objective-C Cocoa 单元测试 Xcode

评论

0赞 mfaani 7/13/2016
据我所知,这里的一些答案已经过时了。Apple 现在有 XCTest,它可以帮助您解决此问题。我认为大多数答案都需要更新。

答:

13赞 Mike Caron 8/29/2008 #1

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

317赞 Chris Hanson 8/29/2008 #2

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

早在 Xcode 2 的日子里,我就写了一系列关于如何使用 Xcode 单元测试执行一些常见任务的博客文章:

尽管使用 OCUnit 而不是 XCTest,但概念大致相同。

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

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

评论

5赞 Grant Limberg 3/3/2009
Peter Hosey 还在 12 月的加利福尼亚州森林湖 Cocoaheads 会议上就 Cocoa 单元测试做了很好的演讲。这是它的视频: vimeo.com/2725498
1赞 drekka 4/12/2011
大约一年前,当我开始使用 iOS 时,我发现 OCUnit(对我来说)有一个严重的缺点——我无法在模拟器或设备上运行它。从那时起它可能发生了变化 - 我没有检查过,但我一直使用 GHUnit 只是因为这个原因。
1赞 Robert 4/25/2012
有没有关于这个主题的官方 Apple 开发者视频?我浏览了 WWDC 2011 和 2010,但找不到任何...奇怪,因为测试很重要,是吗?
4赞 Steven Green 8/14/2012
“Xcode 单元测试指南”链接已移至“Xcode 单元测试指南”
5赞 BrightIntelDusk 3/25/2014
Xcode 5 现在有 XCTest 它还包括 OCUnit 吗?你会用 XCode 5 的信息更新你的答案吗?
18赞 Ryan Townshend 11/20/2008 #3

我开始使用适用于 iPhone 的 Google 工具箱测试设备,它对我来说效果很好。

google-toolbox-for-mac

7赞 nst 1/18/2009 #4

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

50赞 elasticrat 2/25/2009 #5

查看加布里埃尔·汉德福德 (Gabriel Handford) 的 GHUnit

“GHUnit的目标是:

在 XCode 中运行单元测试,允许 您可以充分利用 XCode 调试器。一个简单的 GUI 来帮助您 可视化您的测试。显示堆栈 痕迹。可作为框架安装 (对于 Cocoa 应用程序),使用简单的 (或 not) 目标设置;或易于包装 到你的 iPhone 项目中。

评论

5赞 Tim Reddy 7/7/2010
+1 GHUnit!我是 iPhone 开发的新手,老实说,与 OCUnit 的绝对噩梦和 GTM 的轻度偏头痛相比,我毫不费力地启动并运行了 GHUnit(说明很完美)。GHUnit 以可用性和易用性而获胜!
3赞 Kristopher Johnson 5/6/2013
请注意,这个答案和随附的评论是前段时间写的。Xcode 现在对基于 OCUnit 的测试有了更好的支持,这使得设置测试并在调试器中运行它们变得容易。
1赞 BigHeadCreations 4/4/2018
此后,此项目已被弃用。
12赞 clint 3/3/2009 #6

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

GTM 对 标准 SenTestingKit 允许您 做UI单元测试,自动绑定 单元测试、日志跟踪和单元 在 iPhone 上进行测试,以及 用于执行静态和动态的工具 测试代码。

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

GTM对用户有广泛的支持 接口单元测试。它支持 测试成像和/或 几乎所有 标准 Cocoa/UIKit UI 对象,以及 使你能够轻松地扩展它 支持您自己的 UI 对象。

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

10赞 Nikita Zhuk 3/15/2009 #7

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

7赞 Joel Levin 3/15/2009 #8

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

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

12赞 Johannes Rudolph 10/25/2009 #9

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

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

6赞 Mihir Mathuria 12/24/2009 #10

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

4赞 C. Bess 5/19/2010 #11

我使用 SimpleUnitTest 与 iPhone 和 iPad 库一起使用。

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

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

你可以从字面上把它放到一个活动项目中,并在 3 分钟(或更短时间)内开始添加单元测试。

评论

0赞 quantumpotato 9/30/2011
的。。它是否应该在运行后立即失败?
7赞 Steph Thirion 8/10/2010 #12

xcode 中捆绑的单元测试支持(用于其简单设置)与 ocrunner(用于某些自动测试/咆哮的好处)相结合,是目前我最喜欢的 Obj-C 单元测试设置。

12赞 Adam Milligan 11/23/2010 #13

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

我们很高兴在 Pivotal Labs 的 iOS 项目中使用 Cedar,并且我们正在积极改进它。欢迎通过 [email protected] 提供任何反馈或建议。

7赞 user709682 4/26/2011 #14

这里有很多

Objective-C 中的List_of_unit_testing_frameworks

5赞 Krzysztof Grzywacz 2/24/2013 #15

我建议研究一下 Kiwi,一个适用于 iOS 的开源 BDD 测试框架:Kiwi

查看该项目的 WIKI 以开始或获取 Daniel Steinberg 的书“Test Driving iOS Development with Kiwi” 测试驾驶-ios-开发

评论

0赞 dbainbridge 3/15/2014
Kiwi 还支持 OS X,请参阅 github.com/allending/Kiwi/wiki/Up-and-Running-with-Kiwi-for-Mac
0赞 Karthik 6/14/2013 #16

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

3赞 dbainbridge 3/16/2014 #17

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