Я столкнулся с проблемой, я не знаю, как написать модульный тест метода static void.
У меня есть класс HttpHelper, который прямо сейчас использует Apache HttpClient. Код, как показано ниже.
public class HttpHelper {
private static CloseableHttpClient httpClient;
public static void init() {
httpClient = HttpClients.custom().setSSLContext(getDummySSL()).build();
}
public static void closeHttpClient() throws IOException {
httpClient.close();
}
private static SSLContext getDummySSL() {
...omit
}
private static void send() {
HttpGet httpGet = new HttpGet("https://someUrl.com");
try(CloseableHttpResponse httpResponse = httpClient.execute(httpGet)) {
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
responseString = EntityUtils.toString(httpResponse.getEntity());
// do something
} else {
throw new Exception();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Итак, в моем main я вызову HttpHelper.init()
для инициализации httpClient. Каждый раз, когда я хочу отправить запрос, я звоню HttpHelper.send()
. Потому что я не хочу каждый раз создавать новый httpClient. В конце я вызову HttpHelper.close()
, чтобы закрыть httpClient.
Мне интересно, как проверить эти пустые методы. Моя концепция состоит в том, чтобы создать один CloseableHttpClient
в моем тесте, а затем вызвать HttpHelper.init()
, чтобы создать фактический. затем сравните мой ожидаемый и фактический один и тот же. Я прав?
Из-за того, что переменная и методы объявлены как статические. Немного сложно писать модульные тесты. Есть много сообщений, в которых говорится, что делать методы статическими - плохая практика. Однако в моем примере я не знаю, как избежать объявления их статическими и сохранить один экземпляр CloseableHttpClient
.
Благодарю вас!
httpClient
вsend()
(чтобыhttpClient
можно было легко издеваться), или измените на нестатический и введитеhttpClient
(чтобыhttpClient
можно было легко издеваться). - person Andrew S   schedule 27.10.2020httpClient
не может хранить один экземпляр? - person rascee   schedule 27.10.2020