如何在每个构建上自动执行单元测试?
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。您的应用程序应该构建。您的测试应该构建然后运行。祝你好运。唷。
【讨论】:
以上是关于如何在每个构建上自动执行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章
(三十一)如何搭建一整套自动化测试框架,必须要显得牛逼(思想)