我有一个单元测试,需要访问我的应用程序目标导入的模块上的内部方法/属性。
例如
子模块.swift
public class SubModuleType {
...
internal let value: InternalSubModuleType
...
}
应用视图控制器.swift
import SubModule
// do things with SubModuleType
AppViewControllerTests.swift
@testable import App
@testable import SubModule
func testWithSubModule() {
let internalSubModuleTypeInstance = SubModule.SubModuleType().value
// ... run a test dependent on internalSubModuleTypeInstance
}
在此测试中,我在访问.value
时收到"使用未声明的类型'内部子模块类型'"。
- 我已将
SubModule
目标添加到"目标依赖项"App-Tests
- 我已经为我正在编译以进行测试的方案的应用程序目标和子模块目标将"启用可测试性"设置为"是"。
@testable import
应该允许您在这些条件下访问标记为内部的类型。我不确定为什么会收到这个编译器错误。我仍然可以使用在我的应用目标中标记为内部的任何类型,方法是使用 @testable
而不是我的子模块目标。
您是否只允许在测试目标中@testable import
1 个目标,或者我缺少什么?
使用 Xcode 9、Swift 3.2
重新创建测试目标似乎已经为我解决了问题。
只需删除旧的测试目标,创建一个新目标,然后将此目标添加到您拥有的所有测试文件中。