我想测试一个视图控制器,并使用依赖注入来进行测试。我想从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版本。