【问题标题】:How do I automatically perform unit tests on each "build and run" action in XCode 5?如何在 XCode 5 中对每个“构建和运行”操作自动执行单元测试?
【发布时间】:2014-01-03 12:35:04
【问题描述】:

我知道之前有人问过类似的问题,但是提供的答案不包括 XCode 5。 我了解 TEST_AFTER_BUILD 设置在 XCode 5 中已过时(请参阅unit testing - RunUnitTests error after XCode 5 update) 这自然会引出我的问题:既然设置已过时,我该如何在每次构建后自动化单元测试。

非常具体:

  • 我的工作区中有多个(超过 10 个)项目。
  • 当我在 Xcode 5(UI 左上角)中按下 RUN 按钮时,我希望针对当前方案中的所有依赖项运行单元测试(当然假设相关项目已被修改)。
  • 此外,如果任何测试失败,则构建和运行操作也会失败。

这在 XCode 4 中工作;请参阅上面的链接以了解“旧方法”现在是如何被打破的。

这是一个迁移问题。我不需要关于 XCode 单元测试的一般(可能已经过时)教程。

【问题讨论】:

  • 希望我的回答对你有所帮助..
  • ⌘U 来自 Xcode,或 xcodebuild 来自控制台测试。
  • @Jano ⌘U 手动运行测试,我希望测试自动运行并更新我的问题以提高清晰度。至于如何使用 xcodebuild 测试,或者它是否有助于解决问题......(?)
  • 已创建雷达来跟踪此openradar.appspot.com/15859153
  • @qnoid 不,你没有。您为不相关的问题创建了一个“雷达”。请不要错误地引用我的问题,因为它与您所描述的问题有关。你为什么要这样做?

标签: ios xcode unit-testing


【解决方案1】:

虽然我真的希望有更精简和更好集成的东西,但我最接近解决上述问题的是:

  • 向包含我们应用的项目添加构建阶段(请记住,我们有一个包含多个项目的工作区,其中大多数项目会生成我们的应用所需的库)
  • 构建阶段从 xcode 中调用“xcodebuild test”(见下文)

要添加构建阶段,请打开我们要添加构建阶段的目标,然后使用菜单项:

编辑器 > 添加构建阶段 > 添加运行脚本构建阶段

调用 xcodebuild 的自定义脚本如下所示:

cd DIR
xcodebuild -workspace MY_WORKSPACE.xcworkspace -scheme MY_SCHEME -destination ‘platform=iOS Simulator,name=iPhone’ test
...

在哪里: DIR - 包含我的工作区的目录。
... - 对每个被测试的库重复命令调用。

(已添加some info on my blog

这远非完美,但由于缺乏更好的东西,它确实有效。 如果您有更好的解决方案,感谢您发布。

【讨论】:

  • 这似乎在 Xcode 6 中不起作用。它似乎创建了运行 xcodebuild 的无限循环。另外,我在哪里可以查看 xcodebuild 命令的输出?
  • 如果它正在运行(或者甚至失败),您应该在通常查找 Xcode 构建输出的位置看到它。话虽如此,请考虑改用 CI 解决方案。这在 Xcode 5 中从来都不是很好,更不用说 Xcode 6
【解决方案2】:

我可能有一个有用的链接给你:
http://meandmark.com/blog/2013/09/xcode-5-unit-testing-changes/
特别是部分:XCTest

这在 XCode 4 中工作;请参阅上面的链接以了解“旧方法”现在是如何被打破的。

您指出了 Xcode 5 的可能解决方案,即使我不知道它是否是正确的答案。 也许你应该更仔细地指出你的问题......



你在使用你项目的test scheme 吗?您是否尝试过配置正确的预操作并检查您的测试设置?

【讨论】:

  • 我没有指出 Xcode 5 的可能解决方案,仅适用于 XCode 4... 提供的检查链接,以前看过,没有任何帮助。
  • 是的,如果您查看我对该问题的临时答案,它依赖于方案的测试操作(我可以手动运行测试操作,这工作正常)。
  • 但是,是什么让您认为定义为测试操作的一部分的预操作会有所帮助?顺便说一下,前/后操作的输出不会显示在 XCode 中。此外,尽管您可以将测试操作作为构建或运行的后操作运行,但失败的测试不会破坏您的构建/运行操作。好吧,如果 Xcode 中没有显示 pre/post-action 的输出,我怎么知道呢?因为这可以用 xcodebuild 进行测试。
  • sry,我之前完全误解了你的问题。我在这里找到了关于迁移到 xcode 5 的深入介绍:stackoverflow.com/questions/20022512/…。迁移可能没有一个好的起点吗?如果没有,请忽略我,我将停止对此线程的任何回答。 ;)
  • 阅读不是一件坏事,但迁移简介的结论与我在回答中所说的相符-“最终解决方案不如 Xcode 4.x 中自动执行单元测试的好每次我运行主要目标的“运行”或“构建”动作。不幸的是,如果没有“运行脚本”构建阶段,我似乎无法让它工作。” - 与其开心并建议我不理你,不如花点时间了解问题? (不是反问)
【解决方案3】:

从项目导航器中选择项目以打开项目编辑器。在项目编辑器的左侧选择项目或目标。单击编辑器顶部的构建设置按钮。 Test After Build 构建设置位于单元测试集合中。然后将 Test After Build 构建设置设置为 Yes。选择 Product > Build For > Build For Testing 来构建项目并运行测试。我从这个表格中得到了类似问题的答案here

请参阅this tutorial 开始自动化测试。

【讨论】:

  • 它仍然存在 Product > TestProduct > Build For > Testing,每个选项卡中都列出了快捷方式。
  • Nitin,这曾经在 Xcode 4 中工作;正如 Jano 所指出的,此设置已(有意)从 XCode 5 中删除。此外,正如我在问题中解释的那样,尝试使用此设置(例如使用自定义标志)将破坏构建。我的问题专门针对 Xcode 5,所以感谢您抽出宝贵时间回复,但它根本没有帮助。
  • 好的..如果我找到任何解决方案,我一定会告诉你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 2011-03-29
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多