你能在 Xcode 中创建一个“超集”目标吗?
-
03-07-2019 - |
题
出于单元测试的目的,我想在 Xcode 中创建一个 iPhone 项目目标,其中包括所有发布应用程序文件,以及一些包含对 UI 单元测试有用的代码的其他文件。
我可以通过复制原始应用程序目标来做到这一点;但是,这样做的问题是,每次我将新的源文件添加到应用程序目标时,我还需要将其添加到 UnitTestUI 目标。这没什么大不了的,只是总是记住向两个目标添加文件很不方便。
是否有某种方法可以设置依赖项,以便添加到原始应用程序目标的每个文件也自动添加单元测试目标?
解决方案
在Xcode中,您可以创建彼此直接相关的目标。在添加新目标时,有许多非产品构建目标可以在其他类别中为此提供帮助,具体取决于您的设置的简单性或复杂程度。为主要项目目标直接依赖而创建运行单元测试的特定目标非常常见,并且由Apple和许多博客记录。
但是,在您的情况下,您可能需要对新的UI测试目标进行大量调整,但一旦设置完成,它将非常容易维护。不知道你的具体情况,不可能给你一步一步的答案,但这里是一般的指导方针(根据你的情况调整):
- 创建原始目标的副本,因为大多数设置都是相同的。
- 选择新目标并打开检查员(⌘ I)
- 在直接相关性下,点击+按钮,然后选择您的主要目标。
- 根据需要设置新目标,使用额外的文档/来源/规则或其他。 醇>
如果你喜欢拖放东西,你也可以将原始目标(从目标显示三角形下方)拖到新目标中,它会自动设置依赖关系。
现在,选择您的测试目标作为活动目标,它将始终使用这些规则构建。此外,如果您在主目标中添加/更改源,则在构建测试目标时将正确地重建它...不需要记住也将源文件添加到测试目标。我建议花一些时间阅读各种Xcode文档并使用大量可用的目标模板......从长远来看,它确实有助于提高产品的使用效率。如果您知道如何,即使是非常大或复杂的项目,也可以在Xcode中轻松完成许多漂亮的事情。
其他提示
不,没有。您是否希望单元测试目标中的每个文件都有特殊原因?这将包括main.m和您未测试的所有类(例如您的视图类)。事实上,如果main.m包含在您的单元测试中,那么您的单元测试如何才能正常运行?
我通过将大部分应用程序构建为静态库来解决这个问题,该库链接到应用程序和单元测试目标。
我的项目中的目标如下所示:
- libMyApp
- 编译.m文件
- 我的应用程序
- libMyApp(依赖项)
- 与库的链接:libMyApp.a
- UITest.app
- libMyApp(依赖项)
- 与库的链接:libMyApp.a
这样我就可以添加 .m
文件仅发送到“libMyApp”目标,并让它们在应用程序和测试中可用,甚至不需要重新编译。
唯一的问题是静态库似乎不支持 Objective-C 类别,所以我仍然必须将它们分别添加到每个目标中。