Тестируем HTTP клиент на Java

Не так давно, для одного из проектов, пришлось написать простенький HTTP клиент на Java. Он совсем простой и состоит буквально из одного метода - Gist. Поэтому я решил не использовать Apache’s HTTPClient и другие библиотеки, вроде Unirest или Google HTTP Client. Хотя, если бы требовалось что-то посерьезнее, нежели простые HTTP запросы, рассмотрел бы другие варианты.

Для тестирования нам понадобятся следующие библиотеки:

{% gist 63b9084d3804f72be2d7 HttpClientTest.java %}

На мой взгляд, код получился очень понятным и не требует детального пояснения.

Единственное, стоит пожалуй разъяснить зачем нужны аннотации сверху класса. Первая из них - @RunWith, заменяет стандартный JUnit runner тестов на PowerMock’овский. Вторая аннотация - @PrepareForTest, подготавливает классы для тестов, так как они (классы) будут возвращать mock-объект (URL) или являются final (HttpClient). Документация по @PrepareForTest

Пример JSON’а, возвращаемого в случае успешного ответа:

{% gist 63b9084d3804f72be2d7 search.json %}

Файл search.json необходимо поместить по следующему пути: src/test/resources/http_client/search.json. Иначе, если вы напутаете с путями, getResourceAsStream вернет null.

Если вы знаете best practices по написанию тестов на Java, или используете другую библиотеку, которая позволяет убрать часть mock’ов из кода теста, я буду рад если вы оставите комментарий.

Anton Kaliaev

Software engineer, blogger, public speaker, traveler

Ulyanovsk, Russia http://homeonrails.com