我正在尝试了解XCTest
框架中是否存在某些内容,防止我的测试类看到方便的初始化方法在要测试的模块的类中定义了这些内容?我正在使用@testable import覆盖非公开类并将其子类化。
之前测试运行正确。这是一些XCode 11.4错误吗?
我有多次版本的此错误,每次它都是便捷初始化时,即使已声明为public。
调用中参数'存储库'的参数丢失错误
//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's release notes中提到的更改。
便捷初始化器继承,用于在 定义基类的模块现在带有附加功能 限制。当这些子类具有不公开的基类时 指定的初始化程序,它们不再自动继承 它们的超类提供的便捷初始化程序。要还原此 自动继承行为时,基类必须确保所有 它指定的初始化器是公共的或开放的。 (51249311)
我相信,如果您将所有指定的初始化程序公开,则应该可以从单元测试类中看到它。