Как выполнить модульное тестирование докладчика, который порождает другое представление без появления графического интерфейса? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть класс докладчика, который будет порождать нового докладчика и смотреть на успешное выполнение.Перед порождением следующего докладчика / представления выполняется некоторая бизнес-логика, которую я хочу выполнить модульным тестированием.Моя проблема в том, что я не могу избежать появления реального окна графического интерфейса при выполнении моего модульного теста.

Вот некоторый псевдо-код, который демонстрирует проблему:

// View1 and Model are interfaces
public Presenter1(View1 view, Model model) {
  // ....
}


public void handleOKClick() {
  // Method triggered by view

  String data = view.getSomeUserInput();
  // ... business logic I wish to test  


  if (shouldLoadNextView) {
    // Business logic concluded the next view should be loaded

    View2 nextView = new View2Impl();
    Presenter2 nextPresenter = new Presenter2(nextView, model);
    nextView.setPresenter(nextPresenter);
    nextView.showView();
  }
}

В моем модульном тесте яможет высмеивать экземпляры View1 и Model, которые я передаю своему конструктору Presenter1.Затем я могу проверить, что моя бизнес-логика взаимодействует с ними, как и ожидалось.В настоящее время я не могу запретить отображение следующего представления, поскольку мой экземпляр Presenter1 создаст конкретную реализацию View2 и отобразит ее.

Мне кажется, что у меня осталось три варианта выбора:

  1. Измени дизайн моего класса.Возможно, конструктор Presenter1 должен взять экземпляр View2 в качестве аргумента, что позволяет мне его высмеивать для целей тестирования.

  2. Найти хитрый способ убить представление из моегокод модульного теста, как только он появился.Я не уверен, как лучше это сделать.

  3. Внесите более фундаментальные изменения в дизайн моего класса проекта, чтобы докладчики никогда не создавали новые представления таким образом.

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Прошло время, и с тех пор я принял вариант 1. Мне кажется неуклюжим предварительно конструировать представления, когда они могут не понадобиться, но в то же время мои классы представлений легки и дешевы в создании.

1 голос
/ 17 февраля 2012

На вашем месте я бы выбрал вариант 3, чтобы ваш докладчик общался через события с другим представлением, чтобы вы могли свободно связывать их, и докладчик стало бы легче тестировать и проще в реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...