Прежде всего, вы должны действительно прочитать хороший учебник о Mockito, такой как vogella . Видите ли, вы просто складываете много вещей, которые бессмысленны .
Как:
@Mock
private TextQueue textQueue;
чтобы потом иметь
textQueue = spy(textQueue);
в вашем тестовом случае. Вы должны быть действительно ясно об этом. Шпион строится на реальном экземпляре тестируемого вами класса. Создание шпиона, который шпионит за издевательством, как сказано: это не имеет смысла.
Тогда:
}catch(final Exception e){
Logger.error("add text to queue threw an error" + e);
Опять бессмысленно. Вся идея ваших юнит-тестов заключается в том, что они терпят неудачу , когда что-то не так. Когда ваш производственный код выдает неожиданные исключения, вы не регистрируете их, а просто позволяете им в конце пройти ваш тестовый случай.
Чтобы ответить на реальный вопрос: он выглядит , как будто ваш производственный код использует конкретный «постоянный» экземпляр регистратора. Учитывая этот дизайн, единственный способ проверить ваш производственный код будет:
- сделать этот ЛОГГЕР поддельным объектом
- каким-то образом внедрить его в экземпляр
underTest
вашего производственного кода класса
- вызвать этот метод для тестирования на
underTest
(и каким-то образом заставить метод вызвать исключение)
- убедитесь, что поддельный регистратор увидел ожидаемый вызов
error()
Мы не можем дать лучший совет, потому что вашего кода недостаточно, мы действительно не знаем, что делает ваш производственный класс (например: мы не знаем, что такое LOGGER и куда он идет from. Если это статическая переменная, то, скорее всего, вы не можете получить «контроль» над ней с помощью Mockito).
В любом случае вам, вероятно, действительно нужен концепт spy . Чтобы протестировать addTextToQueue()
, вам нужен способ вызова «реальной» реализации addTextToQueue()
, но вызов addTser()
внутри должен перейти к макету (чтобы вы могли контролировать, что делает этот вызов).
Но, как уже было сказано: начните с действительно , исследуя, как работает Mockito, вместо того, чтобы собирать воедино вещи, которые не имеют смысла в каком-то подходе "проб и ошибок". Правильное модульное тестирование с использованием насмешек сложно, вы не можете узнать это методом «проб и ошибок».