为什么我应该为 运行 XCTests 使用单独的测试目标,我应该怎么做?
Why should I use a separate test target for running XCTests and how should I do that?
我曾经。在其中一个答案中,我被告知在 运行 单元测试(至少在 iOS 开发中)时使用单独的测试目标(而不是主应用程序)是一种常见的做法。我试图找到一些关于它的资源,但我找不到
我明白,这可能是最佳实践,所以我真的很想了解它。有人可以向我解释为什么它很重要,我能从中得到什么好处以及我应该如何去做?非常感谢指向一些解释该问题的文章的链接。
P.S。我知道我需要特殊的测试环境(假内存数据库、模拟网络层等),但到目前为止,我在没有单独的测试主机的情况下设法实现了它。但我相信可能有更好的方法。
回答你的观点:
- 为什么使用单独的测试目标很重要?
关注点分离。单元测试目标没有与常规应用程序目标相同的结构 - 它包含一个测试包,它引用被测应用程序目标,以及测试 类 和任何帮助程序 类必需的。它不是添加了测试代码的应用程序目标的副本 - 事实上,它甚至不应该包含被测代码。这意味着您无需做出任何特殊努力来使测试目标与主应用程序目标保持同步——测试包加载主应用程序这一事实会为您处理所有这些。 (您对 Richard Ross 对您之前问题的回答发表了评论,表明您已经 运行 解决了重复造成的困难)。
- 我应该怎么做? (检查 Xcode 7)。
假设您要将目标添加到没有任何测试的现有项目,select 主项目,然后单击项目中目标列表下方的“+” .您还可以使用“文件”->“新建”->“目标”菜单选项。
您会看到一个菜单,要求您为新目标选择一个模板。 Select 'Test' 并在测试中 select 'iOS Unit Testing Bundle'。
检查下一个屏幕中的字段 - 默认情况下它们应该是正确的 - 但如果 project/workspace 中有很多目标,您可能需要仔细检查 'Target to be Tested' 字段值是否正确。单击 'OK',您应该有一个正常运行的单元测试包,其中包含一个示例测试,您应该能够 运行 使用 Apple-U 或 Product->Test 您仍然需要 #import
应用 类 如果您使用的是 ObjC。
如果您正在创建一个新项目,您只需在创建项目时勾选 'Include Unit Test' 框 - 无需其他步骤。
Apple Docs(包含相关 WWDC 演示文稿的链接)
教程。大多数教程都有点过时了。但变化不大,所以只需查看文档并找出答案即可。下面两个可能有用,否则只是 google。乍一看,他们中的大多数人似乎都认为该项目在一开始就设置了单元测试
http://www.raywenderlich.com/22590/beginning-automated-testing-with-xcode-part-12 (2012/iOS 6,但过程仍然大致相同。还处理 Jenkins,Git 和 运行ning 来自 CLI 的测试).
Unit testing in OSX - 最近的 post - 不是 iOS,我知道,但比大多数 iOS 教程(2015 年 10 月)更新,并且给出了分步说明(包括在构建方案中设置单元测试目标,这在您的情况下可能不是必需的)。无论如何可能值得一看。
我曾经
我明白,这可能是最佳实践,所以我真的很想了解它。有人可以向我解释为什么它很重要,我能从中得到什么好处以及我应该如何去做?非常感谢指向一些解释该问题的文章的链接。
P.S。我知道我需要特殊的测试环境(假内存数据库、模拟网络层等),但到目前为止,我在没有单独的测试主机的情况下设法实现了它。但我相信可能有更好的方法。
回答你的观点:
- 为什么使用单独的测试目标很重要?
关注点分离。单元测试目标没有与常规应用程序目标相同的结构 - 它包含一个测试包,它引用被测应用程序目标,以及测试 类 和任何帮助程序 类必需的。它不是添加了测试代码的应用程序目标的副本 - 事实上,它甚至不应该包含被测代码。这意味着您无需做出任何特殊努力来使测试目标与主应用程序目标保持同步——测试包加载主应用程序这一事实会为您处理所有这些。 (您对 Richard Ross 对您之前问题的回答发表了评论,表明您已经 运行 解决了重复造成的困难)。
- 我应该怎么做? (检查 Xcode 7)。
假设您要将目标添加到没有任何测试的现有项目,select 主项目,然后单击项目中目标列表下方的“+” .您还可以使用“文件”->“新建”->“目标”菜单选项。
您会看到一个菜单,要求您为新目标选择一个模板。 Select 'Test' 并在测试中 select 'iOS Unit Testing Bundle'。
检查下一个屏幕中的字段 - 默认情况下它们应该是正确的 - 但如果 project/workspace 中有很多目标,您可能需要仔细检查 'Target to be Tested' 字段值是否正确。单击 'OK',您应该有一个正常运行的单元测试包,其中包含一个示例测试,您应该能够 运行 使用 Apple-U 或 Product->Test 您仍然需要 #import
应用 类 如果您使用的是 ObjC。
如果您正在创建一个新项目,您只需在创建项目时勾选 'Include Unit Test' 框 - 无需其他步骤。
Apple Docs(包含相关 WWDC 演示文稿的链接)
教程。大多数教程都有点过时了。但变化不大,所以只需查看文档并找出答案即可。下面两个可能有用,否则只是 google。乍一看,他们中的大多数人似乎都认为该项目在一开始就设置了单元测试
http://www.raywenderlich.com/22590/beginning-automated-testing-with-xcode-part-12 (2012/iOS 6,但过程仍然大致相同。还处理 Jenkins,Git 和 运行ning 来自 CLI 的测试).
Unit testing in OSX - 最近的 post - 不是 iOS,我知道,但比大多数 iOS 教程(2015 年 10 月)更新,并且给出了分步说明(包括在构建方案中设置单元测试目标,这在您的情况下可能不是必需的)。无论如何可能值得一看。