Получение EasyMock макет объектов для создания исключений - PullRequest
21 голосов
/ 17 февраля 2011

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

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

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

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

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

Ссылки

Ответы [ 2 ]

28 голосов
/ 17 февраля 2011

Из документации :

Для указания исключений (точнее: Throwable s), которые будут выброшены, объект, возвращаемый expectLastCall() и expect(T value), предоставляет метод andThrow(Throwable throwable). Метод должен вызываться в состоянии записи после вызова Mock Object, для которого он указывает Throwable, который должен быть брошен.

Неконтролируемые исключения (то есть RuntimeException, Error и все их подклассы) могут быть выброшены из любого метода. Проверенные исключения могут быть выброшены только из методов, которые действительно их генерируют.

Например:

expectLastCall().andThrow(new HibernateException("Something terrible happened"));

expect(query.list()).andThrow(
        new HibernateException("Something terrible happened"));
4 голосов
/ 17 февраля 2011

Вы можете использовать метод andThrow(Throwable throwable) в простой модели. Проверьте документацию - заголовок Работа с исключениями .

Например

 expect(mock.voteForRemoval("Document"))
    .andThrow(new RuntimeException(), 4);
...