在非测试目标中使用 XCTest

Posted

技术标签:

【中文标题】在非测试目标中使用 XCTest【英文标题】:Using XCTest in non-Test Target 【发布时间】:2017-06-14 03:29:24 【问题描述】:

我正在围绕 XCTest 编写一个可重用的框架,用于对我们的几个项目进行 UI 测试。为此,我创建了一个我想通过 pod 共享的 Cocoa Touch Framework 项目。

是否可以将 XCTest 包含到这样的项目中(没有额外的测试目标)?即使我在构建阶段链接了XCTest.framework,我也收到了无法找到 XCTest 模块的错误。

【问题讨论】:

在此处查看不涉及 Pod 的替代方法的答案:***.com/questions/54147582/… 【参考方案1】:

您应该将$(PLATFORM_DIR)/Developer/Library/Frameworks 添加到框架目标的构建设置中的Framework Search Paths 中。基本上,您不必将您的框架与XCTest.framework 链接起来。

另外,如果您要通过 pod 共享框架,您可以将以下代码添加到您的 podspec 文件中:

Pod::Spec.new do |s|
  ...
  s.weak_framework = "XCTest"
  s.pod_target_xcconfig = 
    'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"',
  
  ...
end

【讨论】:

太棒了!感谢您的快速帮助! 如何从这样的 pod 导入 XCUITest Target 中的文件? 这可以通过使用更具体的 DEVELOPER_FRAMEWORKS_DIR 作为值来稍微改进。它解析为与 $(PLATFORM_DIR)/Developer/Library/Frameworks 相同的目录 从 Xcode 9 开始,DEVELOPER_FRAMEWORKS_DIR 不再解析为 PLATFORM_DIR 的子路径——因此 $(PLATFORM_DIR)/Developer/Library/Frameworks 现在是正确的搜索路径。

以上是关于在非测试目标中使用 XCTest的主要内容,如果未能解决你的问题,请参考以下文章

如何从 XCTest 中的 UI 目标调用主目标中的方法?

如何在 Xcode 中配置和运行目标 C 测试用例--XCTest

XCTest 不会从我的目标应用程序链接类

XCTest:如果我只是对测试目标进行更改,如何防止 Xcode 不必要地重新编译我的项目

XCTest 更改队列

使用 XCTest 在单元测试中获取变量的 nil 值