我曾经asked a question related to XCTests。在其中一个答案中,我被告知在运行单元测试时(至少在iOS开发中)使用单独的测试目标(主应用程序除外)是一种常见做法。我试图找到一些有关它的消息来源,但我无法
我明白,这可能是一种最佳做法,所以我真的很想理解它。有人可以向我解释为什么它很重要,我从中获得了什么好处,我该怎么做呢?一些解释这个问题的文章的链接将不胜感激。
P.S。我知道我需要特殊的测试环境(伪内存数据库,模拟网络层等),但到目前为止我设法实现它而没有单独的测试主机。但我相信可能有更好的方法。
答案 0 :(得分:5)
回答你的观点:
关注点分离。单元测试目标与常规应用程序目标没有相同类型的结构 - 它包含一个测试包,它引用了测试中的应用程序目标,以及测试类和所需的任何帮助程序类。它不是添加了测试代码的应用程序目标的副本 - 事实上它甚至不应该包含被测试的代码。这意味着您不必特别努力使测试目标与主应用程序目标保持同步 - 测试包加载主应用程序处理所有这些事实。 (您对Richard Ross对您之前的q的回答发表了评论,表明您已经遇到了重复导致的困难)。
假设您要将目标添加到没有任何测试的现有项目中,请选择主项目,然后单击项目中目标列表下方的“+”。您还可以使用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月)更新,并提供分步说明(包括设置单元测试目标)构建方案,在您的情况下可能不是必需的)。无论如何,可能值得一看。