【发布时间】:2015-06-11 17:36:29
【问题描述】:
我正在尝试使用 Swift 的 @testable 声明将我的类公开给测试目标。但是我收到了这个编译器错误:
Intervals 是包含我要公开的类的模块。我该如何摆脱这个错误?
【问题讨论】:
标签: ios swift unit-testing swift5.4
我正在尝试使用 Swift 的 @testable 声明将我的类公开给测试目标。但是我收到了这个编译器错误:
Intervals 是包含我要公开的类的模块。我该如何摆脱这个错误?
【问题讨论】:
标签: ios swift unit-testing swift5.4
在您的主要目标中,您需要将Enable Testability 构建选项设置为是。
根据下面@earnshavian 的评论,这应该仅用于根据苹果发行说明的调试构建:“启用可测试性构建设置应仅在您的调试配置中使用,因为它禁止依赖于不导出的优化来自应用或框架的内部符号”https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
【讨论】:
@testable)但需要提交到 App Store?如果Enable Testability 仅用于调试版本,那么解决方法是什么?我是否必须提取我的测试代码才能发布?
在我的例子中,我使用自定义构建配置进行测试(称为 Test)以及 cocoapods 作为依赖项管理器
我必须在Podfile 的末尾添加以下行以启用可测试性
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if config.name == 'Test'
config.build_settings['ENABLE_TESTABILITY'] = 'YES'
end
end
end
end
默认情况下,cocoapods 将 ENABLE_TESTABILITY 设置为 YES,仅适用于 Debug 构建
【讨论】:
【讨论】:
我在使用 Bitrise 运行测试时开始收到此错误。
与其他用户所说的不同,这不是基于Target,或者基于Schema,它是基于Configuration。
选择 Target -> Build Settings 选项卡 -> 查找 testability -> 在您正在使用的配置中启用它。
请注意,Apple 建议在您用于调试而不是 AppStore 的配置上启用此功能。
【讨论】:
这可能是因为您的主要目标Enable Testability 设置为NO。您应该在调试方案(用于运行测试)中将其设置为 YES。
如果你使用 Carthage,这个问题可能是由 @testable 导入框架引起的,因为它们是使用发布方案构建的。
在大多数情况下,导入带有该前缀的框架是不好的做法,因此您可以避免使用它。
如果你不能,你应该在框架的发布方案中Enable Testability。 https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
【讨论】:
如果你有任何机会
install! 'cocoapods',
generate_multiple_pod_projects: true,
incremental_installation: true
那么,就这样吧。
# generated_projects only returns results if the we run "pod install --clean-install"
# or install a pod for the first time
installer.generated_projects.each do |project|
project.build_configurations.each do |configuration|
configuration.build_settings["ENABLE_TESTABILITY"] = "YES"
end
end
【讨论】:
如果您尝试测试框架:
转到测试目标 -> 构建阶段 -> 创建新的副本文件阶段 -> 选择框架 -> 添加所有递归使用的框架
【讨论】:
我是一个初学者,我只是不记得所有设置和选项在 Xcode 中的位置。所以当我在回答这类问题时看到“you can set xxx to yyy ...”时,我总是感到沮丧。 Xcode中的那些xxx在哪里?那些 yyy 是什么?我们需要一张显示我们如何完成工作的地图,但不需要另一个线索,比如 xxx。看来我们是《国家宝藏》中的尼古拉斯·凯奇!
非常感谢这里提供的所有线索!你真的帮了我。但我在这里有一个具体的答案(实际上是你的):
【讨论】:
当我的新 Tests.swift 文件属于错误的目标时,我得到了这个。
【讨论】: