Интеграционный тест для статического метода в Java

#java #spring #testing #integration-testing #powermockito

Вопрос:

У меня есть следующий метод, и я пытаюсь протестировать его в своем интеграционном тесте:

 public Listlt;CountryCodeDTOgt; getAllCountryCodes() {  Listlt;CountryCodeDTOgt; countryCodes = new ArrayListlt;gt;();   for (String country : Locale.getISOCountries()) {  Locale locale = new Locale("", country);  CountryCodeDTO countryCodeDTO = new CountryCodeDTO();  countryCodeDTO.setCountryCode(country);  countryCodeDTO.setName(locale.getDisplayCountry());  countryCodes.add(countryCodeDTO);  }  return countryCodes;  }  

Как новичок в интеграционном тестировании, я действительно понятия не имею, как мне его тестировать. С другой стороны, я нашел кое-что, например, PowerMock, но я думаю, что это для модульного теста, а не для интеграционного теста. Итак, как я должен протестировать этот метод?

Пожалуйста, обратите внимание, что это похоже на модульный тест, тестирующий только этот метод, но в результате мы также тестируем другие методы, например, сохранение, поиск, удаление и т.д. в Интеграционных Тестах. Любая помощь будет признательна.

Комментарии:

1. Немного неясно, что именно вы хотели бы здесь протестировать; CountryCodeDTO просто похоже на оболочку вокруг Java Locale . Хотите ли вы утверждать, что определенные коды стран возвращаются правильно? Кроме того, когда вы пишете интеграционный тест , вы хотели бы избежать насмешек (в основном) и использовать фактические реализации в стеке вызовов-в вашем примере вы бы использовали фактическую реализацию Java Locale.getISOCountries() .

2. Я бы написал модульный тест для этого метода, который не издевался, а просто проверил, что возвращаемый список имеет правильный размер и что один из CountryCodeDTO целых файлов содержит ожидаемые данные. Кстати, ваш дизайн можно было бы улучшить, предоставив CountryCodeDTO конструктор, который принимает страну и имя, и они делают класс неизменяемым, то есть делают поля окончательными и удаляют установщики. Что касается интеграционного теста, то для функции не будет отдельного интеграционного теста getAllCountryCodes , он будет выполняться в рамках других интеграционных тестов.

3. @MickMnemonic Спасибо за ответ, но я не понимаю, что вы предложили. Итак, вы видите метод и должен ли я протестировать его в интеграционном тесте? Если да, то как я могу это проверить?

4. @tgdavies Большое спасибо, я тоже так думал. Итак, в этом случае, когда я пишу интеграционный тест, я должен протестировать getAllCountryCodes метод во время написания модульного теста. Это правда?

5. Вот что я бы сделал.