У меня есть проблема, как сделать тесты jUnit для использования метода REST API - PullRequest
1 голос
/ 13 апреля 2019

Мне нужно сделать тесты JUnit / Mockito для этого кода, но я не знаю, как его запустить.Я не мог найти ответ или какую-либо помощь в SO, поэтому я создал новую тему.Может ли кто-нибудь написать пример того, как я должен это сделать?

 @Override
    public List<CurrencyList> currencyValuesNBP() {
        ArrayList<CurrencyList> currencyListArrayList = new ArrayList<>();

        try {
            URL url = new URL("http://api.nbp.pl/api/exchangerates/tables/A?format=json");
            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();

            ObjectMapper objectMapper = new ObjectMapper();
            currencyListArrayList = objectMapper.readValue(jsonOutput, new TypeReference<ArrayList<CurrencyList>>() {
            });

        } catch (IOException e) {
            e.printStackTrace();
        }
        return currencyListArrayList;
    }

1 Ответ

0 голосов
/ 13 апреля 2019

Я бы предложил 2 подхода к тестированию вашего метода:

  1. Использование выделенного сервера тестирования - в вашем классе JUnit создайте экземпляр сервера, который будет возвращать фиксированный объект при получении URL-адреса вашегоИспользует метод ('http://api.nbp.pl/api/exchangerates/tables/A?format=json').. Вы можете использовать фиктивный сервер, такой как WireMock , как указано в ionut. После настройки сервера вы можете вызвать протестированный метод и выполнить необходимые проверки.о его возвращаемых значениях. Недостатки этого подхода - необходимость создания сервера и необходимость изменения кода модульного теста, если URL-адрес изменяется в реализации метода.
  2. Рефакторинг вашего метода в качестве основного метода и конкретногометод использования и тестирование основного метода - рефакторинг кода:

@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 в вашем коде.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...