使用@testable时,"模块未编译用于测试"

hgw*_*tle 138 unit-testing ios swift swift2

我正在尝试使用Swift 2的新@testable声明来将我的类暴露给测试目标.但是我收到这个编译错误:

在此输入图像描述

Intervals是包含我试图公开的类的模块.我该如何摆脱这个错误?

sga*_*gaw 221

在主目标中,您需要将Enable Testability构建选项设置为是.

根据下面的@earnshavian的评论,这应该只用于调试版本,根据苹果发行说明:"Enable Testability构建设置应仅在您的调试配置中使用,因为它禁止依赖于不从中导出内部符号的优化应用程序或框架" https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326

  • @ user1601259 - 您可以通过选择顶级项目,转到Build Settings,然后在Build Options标题下查找该选项. (2认同)

Bar*_*zyk 13

解决方案很简单.确保在应用方案下正确设置了复选框.你应该取消选中你的测试目标存档生成.

在此输入图像描述

  • 有关更多信息,请参见此处:https://developer.apple.com/library/mac/technotes/tn2215/_index.html (2认同)

rgk*_*shi 12

我在使用 Bitrise 运行测试时开始收到此错误。

与其他用户所说的不同,这不是Target基础,或按Schema基础,而是基础Configuration。选择Target->Build Settings选项卡 -> 查找testability-> 在您正在使用的配置上启用它。

请注意,Apple 建议在您用于调试(而非 AppStore)的配置上启用此功能。


Tim*_*Tim 11

在我的例子中,我使用自定义构建配置进行测试(被调用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
Run Code Online (Sandbox Code Playgroud)

默认情况下,仅cocoapods设置为构建ENABLE_TESTABILITYYESDebug


Sam*_* B. 8

这可能是因为您的主要目标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

  • 如何避免使用 @testable 导入框架?这里有什么好的做法? (2认同)

Wla*_*ala 7

对于只在运行Xcode Profiler时才遇到此问题的用户:将方案管理中的配置文件构建配置切换为启用了可测试性的配置-在大多数情况下可以进行调试:

在此处输入图片说明