为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?
Posted
技术标签:
【中文标题】为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?【英文标题】:Why should I use a separate test target for running XCTests and how should I do that?为什么我应该使用单独的测试目标来运行 XCTests,我应该怎么做? 【发布时间】:2016-02-19 13:33:17 【问题描述】:我曾经asked a question related to XCTests。在其中一个答案中,有人告诉我,在运行单元测试时(至少在 ios 开发中)使用单独的测试目标(除了主应用程序)是一种常见的做法。我试图找到一些关于它的资源,但我找不到
我明白,这可能是一个最佳实践,所以我真的很想了解它。有人可以向我解释为什么它很重要,我能从中得到什么好处以及我应该如何去做?非常感谢您提供一些解释该问题的文章的链接。
附:我知道我需要特殊的测试环境(假内存数据库、模拟网络层等),但到目前为止,我设法在没有单独的测试主机的情况下实现了它。但我相信可能有更好的方法。
【问题讨论】:
注意:在写这个问题时,我混合了一个单独的测试目标和一个单独的测试主机。但是由于我在单独的测试目标上得到了很好的答案,所以我将保留这个问题并创建另一个关于单独测试主机的问题。 Discussion on Meta on the topic 【参考方案1】:回答你的观点:
-
为什么使用单独的测试目标很重要?
关注点分离。单元测试目标与常规应用目标的结构不同——它包含一个测试包,它引用被测应用目标,以及测试类和所需的任何帮助类。它不是添加了测试代码的应用程序目标的副本——实际上它甚至不应该包含被测代码。这意味着您不必做任何特别的努力来使测试目标与主应用程序目标保持同步——测试包加载主应用程序的事实会为您处理所有这些。 (您对 Richard Ross 对您之前的 q 的回答发表了评论,表明您已经遇到了重复导致的困难)。
-
我该怎么做呢? (在 Xcode 7 上检查)。
假设您想要将目标添加到没有任何测试的现有项目中,请选择主项目,然后单击项目中目标列表下方的“+”。您也可以使用 File->New->Target 菜单选项。
您将看到一个菜单,要求您为新目标选择模板。选择“测试”并在测试中选择“iOS 单元测试包”。
检查下一个屏幕中的字段 - 默认情况下它们应该是正确的 - 但如果项目/工作区中有很多目标,您可能需要仔细检查“要测试的目标”字段值是否正确。单击“确定”,您应该有一个正常运行的单元测试包,其中包含一个示例测试,您应该能够使用 Apple-U 或 Product->Test 运行您仍然需要#import
应用程序类如果您是使用 ObjC。
如果您正在创建一个新项目,您只需在创建项目时勾选“包含单元测试”框 - 无需其他步骤。
Apple Docs(带有相关 WWDC 演示文稿的链接)
教程。周围的大多数教程都有些过时了。但变化不大,所以只需查看文档并弄清楚。下面的两个可能有用,否则只是谷歌。乍一看,他们中的大多数人似乎都认为项目一开始就设置了单元测试
http://www.raywenderlich.com/22590/beginning-automated-testing-with-xcode-part-12(2012/iOS 6,但过程大致相同。还处理 Jenkins、Git 和从 CLI 运行测试)。
Unit testing in OSX - 最近的帖子 - 不是 iOS,我知道,但比大多数 iOS 教程(2015 年 10 月)更新,并提供逐步说明(包括在构建方案中设置单元测试目标,在您的情况下可能不需要)。无论如何可能值得一看。
【讨论】:
原来是我搞错了,把单独的测试目标和单独的测试主机搞混了。我改变了问题,但是您关于单独目标的回答对社区来说非常好且有价值。因此,在a short consultation on Meta SO 之后,我将答案恢复为原始答案,并且我将提出另一个关于单独测试主机的问题。如果你也能在那里做出贡献,我会很高兴。但是如果没有,那也没关系:)非常感谢! 新问题:http://***.com/questions/35515825/why-should-i-use-a-separate-test-host-for-running-xctests-and-how-should-i-do-th以上是关于为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章