我目前有一个写库的设置,其中包含三个目标:
在A中,我上了课:
public class TestBaseClass {
public convenience init() {
self.init(a: SomeDI())
}
init(a: SomeDI) {}
}
(通常,我使用内部初始化程序进行依赖项注入,并实现便捷的初始化函数以提供默认注入)
在ATestSupport中,我有此类的模拟:
@testable import A
public class MockTestClass: TestBaseClass {}
(这些类通常由Cuckoo生成,它们不实现自己的初始化程序,而是从其父级继承它们。)
在ATests中,我有一些需要这个模拟类的规范:
@testable import A
@testable import ATestSupport
let someMockDI = MockTestClass() // this does not work, only the internal init is visible
let sut = SomeOtherClass(neededDI: someMockDI)
问题:
我目前不了解的原因是为什么我不能使用A中的便捷初始化程序来初始化此类,但是我可以使用内部初始化程序,而且如果我更改A中的实现,则可以使用它没有任何公共修饰符(对于类和初始化程序都没有),那么我可以使用(现在是内部的)便捷初始化程序。
同样有效的是将以前的内部初始化公开为公共,但是现在SomeDI
也公开了,我试图避免。
我有什么办法可以保持自己的可见性,但可以在我的spec类中使用便捷初始化程序来启动模拟?