从NIB实例化视图控制器无法在Swift中调用自定义初始化程序

时间:2019-05-15 14:07:15

标签: swift dependency-injection

我想测试一个视图控制器,并使用依赖注入来进行测试。我想从NIB实例化我的视图控制器以测试接口(在这里的问题中使用Mock依赖项设置NIB)

在我的考试中,我有

var VCNib: ViewController!
    VCNib = (UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "VC") as! ViewController)

然后注入依赖项

    let dm = DataManagerMock()
    mockViewModel = ViewModelMock(dataManager: dm)
    VCNib.viewModel = mockViewModel!

然后我进行测试

VCNib.loadData()
XCTAssertEqual(VCNib.lastData, "Mock data")

但是,我的模拟视图模型似乎没有正确实例化。

我试图通过自定义初始化程序注入依赖项:

init(vmb : ViewModelBuilderProtocol) {
    viewModelBuilder = vmb
    super.init(nibName: nil, bundle: nil)
}

但是测试和常规代码都在下面运行所需的init,这意味着我无法注入依赖项(视图模型生成器)

required init?(coder aDecoder: NSCoder) {
    viewModelBuilder = ViewModelBuilder()
    super.init(coder: aDecoder)
}

那么,当我实例化我的viewcontroller进行测试时,如何运行自定义init?

我的Git对该问题的执行最少-请注意,我正在为此实现MVVM版本。

https://github.com/stevencurtis/testinit

0 个答案:

没有答案