Я бы предложил 2 подхода к тестированию вашего метода:
- Использование выделенного сервера тестирования - в вашем классе JUnit создайте экземпляр сервера, который будет возвращать фиксированный объект при получении URL-адреса вашегоИспользует метод ('http://api.nbp.pl/api/exchangerates/tables/A?format=json').. Вы можете использовать фиктивный сервер, такой как WireMock , как указано в
ionut
. После настройки сервера вы можете вызвать протестированный метод и выполнить необходимые проверки.о его возвращаемых значениях. Недостатки этого подхода - необходимость создания сервера и необходимость изменения кода модульного теста, если URL-адрес изменяется в реализации метода. - Рефакторинг вашего метода в качестве основного метода и конкретногометод использования и тестирование основного метода - рефакторинг кода:
@Override
public List<CurrencyList> currencyValuesNBP() {
List<CurrencyList> currencyListArrayList = new ArrayList<>();
try {
URL url = new URL("http://api.nbp.pl/api/exchangerates/tables/A?format=json");
ObjectMapper objectMapper = new ObjectMapper();
currencyListArrayList = objectMapper.readValue(handleRESTApiCall(url), new TypeReference<ArrayList<CurrencyList>>() {
});
} catch (IOException e) {
e.printStackTrace();
}
return currencyListArrayList;
}
public String handleRESTApiCall(URL url) {
try {
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setRequestProperty("Content-Type", "application/json");
InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String jsonOutput = bufferedReader.readLine();
httpURLConnection.disconnect();
return jsonOutput;
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
Теперь вы можете протестировать, используя Mockito
для URL
instance, handleRESTApiCall
без необходимости в экземпляре сервера. Недостатками является необходимость добавления дополнительного покрытия котла на выходе handleRESTApiCall
, чтобы получить object вы хотите проверить.Тем не менее, вы извлечете выгоду из базового решения для обработки вызовов API REST в вашем коде.
Ссылки: