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

时间:2016-02-19 13:33:18

标签: ios unit-testing xctest

我曾经asked a question related to XCTests。在其中一个答案中,我被告知在运行单元测试时(至少在iOS开发中)使用单独的测试目标(主应用程序除外)是一种常见做法。我试图找到一些有关它的消息来源,但我无法

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

P.S。我知道我需要特殊的测试环境(伪内存数据库,模拟网络层等),但到目前为止我设法实现它而没有单独的测试主机。但我相信可能有更好的方法。

1 个答案:

答案 0 :(得分:5)

回答你的观点:

  1. 为什么使用单独的测试目标很重要?
  2. 关注点分离。单元测试目标与常规应用程序目标没有相同类型的结构 - 它包含一个测试包,它引用了测试中的应用程序目标,以及测试类和所需的任何帮助程序类。它不是添加了测试代码的应用程序目标的副本 - 事实上它甚至不应该包含被测试的代码。这意味着您不必特别努力使测试目标与主应用程序目标保持同步 - 测试包加载主应用程序处理所有这些事实。 (您对Richard Ross对您之前的q的回答发表了评论,表明您已经遇到了重复导致的困难)。

    1. 我应该怎么做呢? (在Xcode 7上查看)。
    2. 假设您要将目标添加到没有任何测试的现有项目中,请选择主项目,然后单击项目中目标列表下方的“+”。您还可以使用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月)更新,并提供分步说明(包括设置单元测试目标)构建方案,在您的情况下可能不是必需的)。无论如何,可能值得一看。