Инстанцирующий контроллер представления из NIB не может вызвать пользовательский инициализатор в Swift - PullRequest
0 голосов
/ 15 мая 2019

Я хочу протестировать 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

...