【问题标题】:What is the best way to unit test Objective-C code?对 Objective-C 代码进行单元测试的最佳方法是什么?
【发布时间】:2026-01-06 19:55:02
【问题描述】:

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

【问题讨论】:

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

标签: objective-c cocoa unit-testing xcode


【解决方案1】:

查看OCUnit。苹果的开发者网络有a great introduction

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • Peter Hosey 还在 12 月的加利福尼亚州森林湖 Cocoaheads 会议上就 Cocoa 单元测试做了一个很好的介绍。这是它的视频:vimeo.com/2725498
    • 大约一年前我开始使用 iOS 时,我发现 OCUnit(对我来说)有一个严重的缺点——我无法在模拟器或设备上运行它。从那以后它可能已经改变了 - 我没有检查过,但我一直在使用 GHUnit 只是因为这个原因。
    • 有没有关于这个主题的官方苹果开发者视频?我经历了 WWDC 2011 和 2010,但找不到任何...奇怪,因为测试很重要,是吗?
    • Xcode 单元测试指南链接已移至Xcode Unit Testing Guide
    • Xcode 5 现在有 XCTest 是否还包括 OCUnit?你会用 XCode 5 的信息更新你的答案吗?
    【解决方案3】:

    我开始使用适用于 iPhone 的 Google 工具箱测试平台,它对我来说非常有用。

    google-toolbox-for-mac

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        查看 Gabriel Handford 的 GHUnit

        “GHUnit 的目标是:

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

        【讨论】:

        • +1 为 GHUnit!我是 iPhone 开发的新手,老实说,与 OCUnit 的绝对噩梦和 GTM 的轻度偏头痛相比,我可以毫不费力地启动和运行 GHUnit(说明是完美的)。 GHUnit 因易用性和易用性而获胜!
        • 请注意,此答案和随附的 cmets 是不久前编写的。 Xcode 现在对基于 OCUnit 的测试有更好的支持,可以轻松设置测试并在调试器中运行它们。
        • 此项目已被弃用。
        【解决方案6】:

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

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

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

        GTM 为用户提供广泛的支持 接口单元测试。它支持 测试成像和/或 几乎所有的内部状态 标准 Cocoa/UIKit UI 对象,以及 使您可以轻松扩展它 支持您自己的 UI 对象。

        有关如何使用它的说明,请参阅他们的“Code Verification and Unit Testing”页面。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                【解决方案10】:

                Cocoa with Love 的 Matt Gallagher 在单元测试方面有一个very good article

                【讨论】:

                  【解决方案11】:

                  我使用 SimpleUnitTest 适用于 iPhone 和 iPad 库。

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

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

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

                  【讨论】:

                  • 呃..它应该一运行就失败吗?
                  【解决方案12】:

                  Unit Testing support bundled within xcode(因为它的简单设置)结合ocrunner(为了一些自动测试/咆哮的好处)是目前我最喜欢的 Obj-C 单元测试设置。

                  【讨论】:

                    【解决方案13】:

                    我意识到这是一个老问题,但是如果您更喜欢 BDD 样式测试(rspec、Jasmine 等)而不是 xUnit 样式测试(Test::Unit、JSUnit、JUnit 等),那么您可以考虑签出Cedar。 Cedar 为 Objective-C 带来了 BDD 风格的测试,现在该语言支持闭包。

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

                    【讨论】:

                      【解决方案14】:

                      【讨论】:

                        【解决方案15】:

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

                        查看项目的 WIKI 以开始或获取 Daniel Steinberg 的书“Test Driving iOS Development with Kiwi” test-driving-ios-development

                        【讨论】:

                        【解决方案16】:

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

                        【讨论】:

                          【解决方案17】:

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

                          【讨论】:

                            最近更新 更多