如何在每个构建上自动执行单元测试?

Posted

技术标签:

【中文标题】如何在每个构建上自动执行单元测试?【英文标题】:How do I automatically perform unit tests on each build? 【发布时间】:2011-07-13 02:08:47 【问题描述】:

我尝试将单元测试目标作为依赖项添加到项目目标中,但这似乎无法运行实际测试。

【问题讨论】:

不是构建,而是进行单元测试,它负责编译目标和测试目标。 【参考方案1】:

将“构建后测试”构建设置设置为“是”。选择 Product > Build For > Build For Testing 来构建项目并运行测试。

Xcode 5 更新

Xcode 5 不支持 Test After Build 构建设置。我不知道有什么方法可以在 Xcode 5 中的每个构建上自动运行测试。从 OS X 菜单栏中选择 Product > Test 或按 Command + u 在 Xcode 5 中运行单元测试。

【讨论】:

从项目导航器中选择项目以打开项目编辑器。在项目编辑器的左侧选择项目或目标。单击编辑器顶部的构建设置按钮。构建后测试构建设置位于单元测试集合中。 项目构建后仍然没有测试。 你确定吗?如果测试通过,Xcode 不会向您显示测试结果。您必须打开日志导航器(选择视图 > 导航器 > 日志)才能查看测试结果。打开日志导航器并从列表中选择构建以查看构建结果,这应该表明测试已运行。 是的,当然。我故意编辑了 UT 以确保它失败,但它没有失败。 您将哪些目标设置为“构建后测试”设置为“是”?我检查了我的项目,并且应用程序目标和单元测试目标中的构建设置都设置为是。【参考方案2】:

建立目标之间的关系:

在方案选择器中,选择“编辑方案...” 选择测试阶段 确保您看到的是“信息”选项卡,而不是“参数”选项卡 点击“+”并指定您的测试目标 您应该会看到一个测试列表。点击“确定”

然后要运行测试,请选择产品 > 测试,或者直接从键盘选择 ⌘U。这将:

构建您的主要目标 构建您的测试目标 根据类型执行主要目标,运行测试

【讨论】:

【参考方案3】:

为了让 XCode 4 在构建时自动运行单元测试,我必须这样做。

    为您的主要目标启用“构建后测试”。 (见 Mark Szymczyk 的回答) 使您的测试目标能够在主要目标的构建方案的构建阶段运行。 点击产品>管理方案菜单项 双击您的目标方案(我的列表中只有一个) 展开左侧的 Build 手风琴 点击手风琴中的构建选项 您应该会在右侧看到您的测试项目,确保已单击“运行”复选框

【讨论】:

这一步是让它为我工作的缺失部分。此外,我的单元测试在一个单独的项目中,我必须确保我的静态库项目和单元测试项目都启用了“构建后测试”。 @Brian,我认为需要在测试目标上设置“构建后测试”设置,而不是主要目标。 (设置的快速帮助消息提到它由 RunUnitTests 脚本读取,否则会被忽略。)另外,我认为上述步骤可以简化为:选择 Product > Edit Schemes... 和从顶部的弹出窗口中选择方案。然后只需单击 Build 操作选项卡(无需展开它)。最后一步就好了。 This answer,虽然没有那么详细,但解释得很好。【参考方案4】:

我想我应该对适合我的步骤进行高级解释。 (OS X 10.7.4,Xcode 4.3.3)如果您不熟悉 Build Phases 和 Schemes 之类的东西,这里是 Apple 提供的一个很好的资源:@​​987654321@

对于新项目,请确保在输入新项目名称的页面上选中“包含单元测试”复选框。单击 Project Navigator 中的项目图标以查看已自动创建的两个目标。它们将被称为“MyCocoaApp”和“MyCocoaAppTests”。选择 MyCocoaAppTests 目标(不是 MyCocoaApp 目标!)并从视图顶部的选项中选择“构建设置”。在视图顶部附近的搜索栏中输入“构建后测试”。您应该会看到“构建后测试”的单个设置,默认情况下它设置为 NO。单击 NO 设置并将其更改为 YES。再一步。提出项目方案。 (产品菜单 -> 编辑方案...)在左侧栏中选择“构建”。您应该在右侧看到您的两个目标和一些复选框。在“MyCocoaAppTests”行上,选中“运行”复选框并点击“确定”。你完成了。键入命令-B。您的应用将构建,单元测试将构建,单元测试将运行并在默认情况下出现错误时失败。

如果您必须将单元测试添加到现有项目,则涉及更多。首先,请按照 Apple 的说明操作:https://developer.apple.com/library/mac/#documentation/developertools/Conceptual/UnitTesting/02-Setting_Up_Unit_Tests_in_a_Project/setting_up.html#//apple_ref/doc/uid/TP40002143-CH3-SW1

如果您没有遗漏任何步骤,您现在应该设置单元测试,当您选择(产品菜单 -> 测试)时运行该测试。现在,执行上述两个步骤: 1) 将 MyCocoaAppTest 目标的“Test After Build”设置为 YES; 2) 在应用程序的方案的构建部分中选中 MyCocoaAppTest 目标的“运行”复选框。最后一步:您必须将新的“运行脚本”构建阶段添加到 MyCocoaAppTest 目标(不是 MyCocoaApp 目标!)。选择测试目标,点击“Build Phases”,点击右下角的“Add Build Phase”图标,选择“Add Run Script”。 “运行脚本”部分将在其他构建阶段下方打开。脚本字段中包含以下文本:“键入脚本或从工作区拖动脚本文件”。在该字段中,输入:“$SYSTEM_DEVELOPER_DIR/Tools/RunUnitTests”。 (包括引号。)

就是这样。按命令-B。您的应用程序应该构建。您的测试应该构建然后运行。祝你好运。唷。

【讨论】:

以上是关于如何在每个构建上自动执行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

单元测试(参考阿里巴巴Java开发手册)

(三十一)如何搭建一整套自动化测试框架,必须要显得牛逼(思想)

单元测试不规范!事后运维两行泪

第 6 章 unittest 单元测试框架 - Selenium3 自动化测试

iPhone 命令行单元测试(和文件 I/O)

如何使用 Swift 在 XCode UI 自动化中选择随机表格视图单元格