1

我试图了解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
    }
}
4

1 回答 1

0

我正在努力解决同样的问题,并发现这是由于Xcode 11.4 的发行说明中提到的更改。

在定义基类的模块之外定义的子类的便利初始化器继承现在带有额外的限制。当这些子类有一个带有非公共指定初始化器的基类时,它们不再自动从它们的超类继承便利初始化器。要恢复这种自动继承行为,基类必须确保其所有指定的初始化程序都是公共的或开放的。(51249311)

我相信如果您公开所有指定的初始化程序,您应该能够从您的单元测试类中看到它。

于 2020-05-22T12:47:37.680 回答