XCode 4中的“构建后测试”选项无效

14

所以,我在解决这个问题上遇到了一些困难。我搜索了很多资料,但好像找不到任何相关信息。

我的想法是:每次在XCode中构建我的代码时,都要始终运行单元测试。我已经阅读了许多帖子,包括这个问题。我按照指示进行操作,但构建不会运行测试。

我的操作:

  • 我的测试套件是我的主要构建的目标依赖项
  • 我的主要构建设置了“构建后测试”为Yes
  • Scheme下“test”阶段的所有测试都在那里,并且被选中

如果我手动运行测试(通过cmd+U或菜单),测试就会运行。我添加了一个失败的测试来尝试强制构建失败-以确保它们正在运行。构建继续正常通过,测试从未运行。

我确定我在这里错过了一个步骤,但是我无论如何都找不到任何相关文档。是否有其他建议或步骤我应该执行?


3
请问您是否在主目标的方案设置的“测试”部分中添加了您的“测试目标”?要这样做,请编辑主目标方案,从左侧面板点击“测试”部分,然后在右侧面板中添加您的测试目标。然后转到左侧面板的“构建”部分,在右侧部分中,勾选您的测试目标的“运行”。希望这能帮助您! - Learner
@Learner的评论对我很有帮助,我注意到我的测试项目没有在主目标的构建方案设置中设置运行。 - Brian Wigginton
@BrianWigginton 真有趣 - 我已经完成了所有的操作。我认为xCode 4中存在一个错误,在该项目的配置中显露出来了一些奇怪的问题。哦,没关系。将来我会尝试在另一个项目中验证它。 - aperkins
当您单击“测试”时,测试将运行。通常,最新的构建是测试的先决条件,而不是相反。因此,如果您更改代码,然后开始测试,它将进行构建。因此,只需始终进行测试,而不是始终进行构建。您还可以添加脚本构建阶段来调用测试目标,但我自己从未这样做过。 - Bored Astronaut
@BoredAstronaut 整个意图在于,我不希望构建过程“成功”而测试未通过 - 也就是说,拥有这样的功能的整个目的是单元测试是成功构建过程的一部分。这是其他构建环境(如Maven和Ant)中的常见系统,并被认为是一种最佳实践,以帮助确保您修改代码时单元测试是否通过。依赖手动行为通常会导致遗忘,这是我已经学到了太多次的教训 ;) - aperkins
显示剩余2条评论
2个回答

8
无论您在Something.app目标中是否将“构建后测试”设置为“是”或“否”,都没关系。只需要在单元测试目标中将“构建后测试”设置为“是”。还要确保在方案编辑器的“Build”选项卡下选择了单元测试目标的“Test”和“Run”选项。要查看结果,请单击日志导航器视图>导航器>显示日志导航器(command 7)。

我认为这应该是被接受的答案。这是我看到的第一个对于各种形式的这个问题都能完全正确解决,而没有很多额外的“巫术”步骤的答案。感谢@Jared! - big_m

0
在您的主目标的“Build Phases”中,添加一个新的“Run Script”构建阶段。脚本的内容应该是:
"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests"

这将运行测试 - 但仅当它能找到您的项目生成的 .octest 文件时才会运行。RunUnitTests 希望 PRODUCT_NAME 是您的单元测试名称,WRAPPER_EXTENSION 是 .octest(这些是 Xcode 变量)。如果您的主目标是具有测试和应用程序依赖项的聚合目标,则可以考虑在此基础上使其正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接