如何在 Xcode 中运行单个测试用例?

Posted

技术标签:

【中文标题】如何在 Xcode 中运行单个测试用例?【英文标题】:How to run single test case in Xcode? 【发布时间】:2010-08-04 03:20:59 【问题描述】:

我知道最好在进行任何更改后运行所有单元测试用例,以确保不会破坏任何内容。但是,有时,例如调试,我真的只想运行一个测试用例。 Xcode 似乎在 UI 中没有提供任何此类功能,而其他测试框架(例如 JUnit)具有此类功能。

是否有任何解决方法可以在 Xcode 中只运行一个测试用例?

附:我的大多数测试用例都是逻辑测试。因此,它们不在 iPhone 设备中运行。

【问题讨论】:

【参考方案1】:

Xcode 4 现在具有此功能。只需创建一个包含您要运行的测试用例的“运行方案”。

    打开菜单“产品|编辑方案...” 点击“编辑...” 在左侧窗格中,展开“测试”部分。 在右侧窗格中,展开测试包并取消选中您不需要运行的测试用例。

【讨论】:

我通常使用两种方案,一种用于运行我每天运行的所有测试,另一种用于运行我目前关心的特定测试。通过这种方式,我可以将运行缓慢的测试保留在日常计划中,并且它们不会减慢当前的开发速度。 可以通过苹果脚本编辑当前选定测试的方案吗?通过简单的右键单击 -> 运行此测试 有什么方法可以让苹果对此投反对票吗?对于实际数量的测试用例,这是没有用的。 对于 Xcode 7,单击编辑器装订线中测试用例类名称旁边的菱形。【参考方案2】:

+++U

您也可以使用 Control-Option-Command-U 的键盘快捷键

专家取自Apple Documentation

产品 > 执行操作 > 测试。当您正在编辑测试方法时,此动态菜单项会检测编辑插入点所在的当前测试方法,并允许您使用键盘快捷键运行该测试。命令的名称适应显示它将运行的测试,例如 Product > Perform Action > Test testAddition。键盘快捷键是 Control-Option-Command-U。

【讨论】:

美丽。这种方法比公认的答案方便得多。 在 Xcode 7 中不起作用(至少在 Xcode 加载测试索引时不起作用)。【参考方案3】:

我确信没有人错过 Xcode 5 的发布及其轻松运行单个测试用例的能力,但添加此答案只是为了完整性。

在 Xcode 5 中,您可以通过单击小播放按钮来运行单个测试用例,您可以在测试导航器中的测试旁边或编辑器中的测试方法旁边找到该按钮。当您将鼠标悬停在它上面时,它在这两个地方都会显示。

【讨论】:

【参考方案4】:

您也可以在命令行中使用带有--only 参数的xctool,它只会运行指定的测试用例。

【讨论】:

【参考方案5】:

正如您所指出的,OCUnit 测试框架将名称以“test”开头的方法标记为测试用例。这是在运行时完成的

实际上,您的测试用例应该运行得如此之快,以至于启用多少都无关紧要;在您按下“调试”后,您的调试器应该能够很快地在您的测试用例中停止。

话虽如此,禁用某些测试的最快方法可能是使用#if 0 / #endif 块。 Xcode / OCUnit 中不存在动态禁用测试用例的功能,因为没有 GUI 组件。

理论上它应该是可行的,因为在运行时(以及在所有测试运行之前)有一些方法可以访问 OCUnit 中的测试列表,但这需要修改 OCUnit 源代码,这是不可取的(它将是在下一次 Xcode 更新中消失了,仅此而已)。

最后,如果该功能对您很重要,您可以轻松编写自己的测试工具,主要复制 OCUnit 的功能。 然后你可以随心所欲地调整它,添加 UI 等等。

这并不难,而且有点教育意义。这是一个很好的链接,可以帮助您入门:

http://gusmueller.com/blog/archives/2009/10/how_to_write_your_own_automated_testing_framework.html

【讨论】:

【参考方案6】: 转到查看 -> 导航器 -> 测试 (⌘-6) 找到您的测试用例或测试并二次点击它 运行您的案例/测试

【讨论】:

以上是关于如何在 Xcode 中运行单个测试用例?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中运行单个 UI 测试

如何在 Xcode 中配置和运行目标 C 测试用例--XCTest

在单个测试套件中独立运行多个测试用例,无需重新启动应用程序

使用unittest框架,如何单个运行用例?如何生成测试报告?

使用unittest框架,如何单个运行用例?如何生成测试报告?

如何将循环运行的测试用例添加到通过 SOAPUI 生成的 Junit 报告中