Подтвердить что ты не робот

Получение объектов EasyMock для извлечения исключений

Я использую EasyMock для написания модульных тестов для ряда сотрудничающих классов. Один из этих классов (позволяет называть его Foo) открывает сетевое подключение к удаленному серверу и анализирует XML-ответ сервера на то, что могут использовать остальные классы.

В настоящее время мои тесты охватывают только сценарии, в которых все работает, и удаленный сервер запущен и возвращает XML, как ожидалось. Тем не менее, я был бы счастливее, если бы мог издеваться над Foo, чтобы я смоделировал, что произойдет, если удаленный сервер не работает, или есть какая-то другая проблема, вызывающая IOException, которая будет выбрана Foo.

Я просмотрел API EasyMock, и я не вижу ничего похожего на метод, предлагающий макету выбросить исключение.

Для меня не обязательно иметь тесты на основе Exception, но мне любопытно, возможно ли это с помощью EasyMock, и я думаю, было бы полезно протестировать публичный контракт Foo таким образом.

Кто-нибудь сделал что-нибудь подобное с EasyMock раньше?

Ссылки

4b9b3361

Ответ 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);