我试图了解XCTest
框架中是否有某些东西阻止我的测试类看到在我正在测试的模块的类中定义的便利初始值设定项?我正在使用@testable导入来覆盖和子类非开放类。
测试之前运行正常。这是XCode 11.4的错误吗?
我有多个版本的此错误,每次都是方便的初始值设定项,即使它被声明为公共。
调用中缺少参数"存储库"的参数时出错
//Inside FrameworkModule
public class RealObject {
init(repository: SomeRepository) {
//designated initializer
}
convenience override init() {
// Use default repository
}
}
//Inside Test class:
@testable import FrameworkModule
class MockObject: RealObject {
//Inherits initializers from RealObject
}
class TestHelper: NSObject {
var mockObject: MockObject!
}
override init() {
mockObject = MockObject() //Error Missing argument for parameter 'repository' in call
}
}
我正在努力解决同样的问题,并发现这是由于 Xcode 11.4 发行说明中提到的更改。
在 定义基类的模块现在附带了额外的 限制。当这些子类具有具有非公共的基类时 指定的初始值设定项,它们不再自动继承 来自其超类的便利初始值设定项。要恢复此内容 自动继承行为,基类必须确保所有 其指定的初始值设定项是公共的或开放的。(51249311(
我相信如果你把所有指定的初始值设定项都公开,你应该能够从你的单元测试类中看到它。