UnitTest: как проверить, было ли вызвано обновление слушателя - PullRequest
2 голосов
/ 03 марта 2011

Какой самый простой способ убедиться, что обновление слушателя было даже вызвано?

Обновление: я тестирую Слушатель (не Субъект), и как только обновление вызывается, тестовый проход.

     d.addServiceComponentChangeListener(new ServiceComponentChangeListener() {

        //In the Unittest, I want to make sure this has been called
        public void notifyChange(ServiceComponentChangeEvent event) {
            System.out.println("@notifyChange");

        }
    });

Ответы [ 3 ]

2 голосов
/ 03 марта 2011

Даже если слушатель не реализует интерфейс, вы все равно можете создать макет для него, используя что-то вроде Mockito . Используя вставку кода во время выполнения, проверку класса, который нужно смоделировать, и фиолетовую пыльцу пикси, он может выдавать себя за другие классы. В моей компании большинство модульных тестов используют либо Mockito (более новые), либо EasyMock (более старые), поэтому мы уверены, что тестируем ТОЛЬКО один класс.

Я подвергаю сомнению ваше утверждение «Обновление: я проверяю Слушателя (а не Предмет)». Если ваш тест проверяет, вызван ли слушатель, вы проверяете то, что должно вызывать слушателя, а не сам слушатель. Так что же это?

0 голосов
/ 03 марта 2011

Я бы проверил это, заменив вызов System.out или что-то еще, что этот раздел должен действительно сделать интерфейсом, который позже будет смоделирован, и использовал бы проверку поведения, чтобы убедиться, что он был вызван. Итак ...

public class d 
    {
        private MessageDisplayer m_UserDisplay;

        public d()
        {
          m_UserDisplay = new DisplaySystemOut()
        }

        public d(MessageDisplayer AllowsSensing)
        {
          m_UserDisplay = AllowsSensing;
        }

    //blah blah blah....

              d.addServiceComponentChangeListener(new ServiceComponentChangeListener() 
            {
            public void notifyChange(ServiceComponentChangeEvent event) {
                m_UserDisplay.DisplayMessage("@notifyChange");

            }
        });

    } 

Теперь вы можете смоделировать MessageDisplayer в своем тесте и убедиться, что он вызывается и что параметр равен «@notifyChange»

0 голосов
/ 03 марта 2011

Если слушатель реализует интерфейс, вы можете создать фиктивный класс, который реализует слушатель.Затем вы можете создать эту макет под ваши испытания.Если он не реализует интерфейс, пока класс слушателей не является окончательным, вы можете расширить его.

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