为什么我应该使用一个单独的testing目标来运行XCTests,我应该怎么做?

我曾经问过一个与XCTests有关的问题 。 在其中一个答案中,我被告知,在运行unit testing时(至less在iOS开发中),使用单独的testing目标(除主应用程序之外)是一种常见的做法。 我试图find一些关于它的消息来源,但我不能

我明白,这可能是一个最好的做法,所以我真的很想了解它。 有人可以向我解释为什么它很重要,我从中得到什么好处,我应该怎么做呢? 链接到一些文章解释这个问题将不胜感激。

PS我明白,我需要testing的特殊环境(假内存数据库,模拟networking层等),但直到现在我设法实现它没有一个单独的testing主机。 但我相信可能有更好的办法。

回答你的观点:

  1. 为什么使用单独的testing目标很重要?

关注点分离。 unit testing目标不具有与常规应用程序目标相同的结构 – 它包含一个testing包,它引用了testing中的应用程序目标,以及testing类和任何所需的帮助类。 它不是testing代码添加到应用程序目标的副本 – 事实上它甚至不应该包含testing代码。 这意味着你不必做任何特别的努力来保持testing目标与主应用程序目标同步 – testing包加载主应用程序处理所有为你的事实。 (你对Richard Ross对你以前的问题的回答发表了评论,build议你已经遇到了困难重复的原因)。

  1. 我应该怎么做呢? (在Xcode 7上检查)。

假设您想要将目标添加到没有任何testing的现有项目中,请select主项目,然后单击项目中目标列表下方的“+”。 您也可以使用File-> New-> Target菜单选项。 你会看到一个菜单,要求你为你的新目标select一个模板。 select“testing”并在testing中select“iOSunit testing包”。 检查下一个屏幕中的字段 – 默认情况下它们应该是正确的 – 但是如果项目/工作区中有很多目标,则可能需要再次检查“要testing的目标”字段值是否正确。 点击“确定”,你应该有一个正常运行的unit testing包,通过一个示例testing,你应该能够使用Apple-U或产品 – >testing运行。如果你正在使用,你仍然需要#import应用程序类ObjC。

如果您正在创build一个新项目,则只需在创build项目时勾选“包含unit testing”框,无需其他步骤。

  • Apple Docs (链接到相关的WWDC演示文稿)

  • 教程。 大部分教程都是过时的。 但没有太多改变,所以只要看看文档,并找出它。 下面两个可能是有用的,否则只是谷歌。 匆匆一瞥,他们大部分似乎都认为这个项目在开始的时候就已经进行了unit testing

http://www.raywenderlich.com/22590/beginning-automated-testing-with-xcode-part-12(2012 / iOS 6,但是这个过程还是大致相同的。同时也处理Jenkins,Git和运行testingCLI)。

在OSX中进行unit testing – 最近的一篇文章 – 不是iOS,我知道,但是比大多数iOS教程都更新(2015年10月),并给出了一步一步的指导(包括在构buildscheme中设置unit testing目标,你的情况可能不需要)。 反正可能值得一看。