Я хочу протестировать viewcontroller и использовать внедрение зависимостей для этого.Я хочу создать экземпляр моего контроллера представления из NIB для тестирования интерфейса (настройка NIB с зависимостями Mock в вопросе здесь)
в моем тесте у меня есть
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)
}
Итак, как я могу запустить свой собственный init, когда я создаю свой viewcontroller для тестирования?
Мой Git имеет минимальное выполнение этой проблемы - заметьте, я реализуюверсия MVVM для этого.
https://github.com/stevencurtis/testinit