Получение объектов EasyMock для извлечения исключений
Я использую EasyMock для написания модульных тестов для ряда сотрудничающих классов. Один из этих классов (позволяет называть его Foo
) открывает сетевое подключение к удаленному серверу и анализирует XML-ответ сервера на то, что могут использовать остальные классы.
В настоящее время мои тесты охватывают только сценарии, в которых все работает, и удаленный сервер запущен и возвращает XML, как ожидалось. Тем не менее, я был бы счастливее, если бы мог издеваться над Foo
, чтобы я смоделировал, что произойдет, если удаленный сервер не работает, или есть какая-то другая проблема, вызывающая IOException
, которая будет выбрана Foo
.
Я просмотрел API EasyMock, и я не вижу ничего похожего на метод, предлагающий макету выбросить исключение.
Для меня не обязательно иметь тесты на основе Exception
, но мне любопытно, возможно ли это с помощью EasyMock, и я думаю, было бы полезно протестировать публичный контракт Foo
таким образом.
Кто-нибудь сделал что-нибудь подобное с EasyMock раньше?
Ссылки
Ответы
Ответ 1
Из документация:
Для указания исключений (точнее: Throwable
s) объект, возвращаемый expectLastCall()
и expect(T value)
, предоставляет метод andThrow(Throwable throwable)
. Этот метод должен быть вызван в состоянии записи после вызова Макетного объекта, для которого он задает Throwable
, который должен быть выброшен.
Исключенные исключения (т.е. RuntimeException
, Error
и все их подклассы) могут быть выбраны из каждого метода. Проверяемые исключения могут быть выброшены только из методов, которые действительно бросают их.
Например:
expectLastCall().andThrow(new HibernateException("Something terrible happened"));
expect(query.list()).andThrow(
new HibernateException("Something terrible happened"));
Ответ 2
вы можете использовать метод andThrow(Throwable throwable)
в простой макет. Проверьте documentation - заголовок Работа с исключениями.
Например
expect(mock.voteForRemoval("Document"))
.andThrow(new RuntimeException(), 4);