Saya menghadapi masalah, saya tidak tahu cara menulis unit test metode static void.
Saya memiliki kelas HttpHelper yang menggunakan Apache HttpClient sekarang. Kode seperti di bawah ini.
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();
}
}
}
Jadi di main saya, saya akan memanggil HttpHelper.init()
untuk menginisialisasi httpClient. Setiap kali saya ingin mengirim permintaan, saya akan menelepon HttpHelper.send()
. Karena saya tidak ingin membuat httpClient baru setiap saat. Pada akhirnya, saya akan memanggil HttpHelper.close()
untuk menutup httpClient.
Saya bertanya-tanya bagaimana cara menguji metode kosong tersebut. Konsep saya adalah membuat satu CloseableHttpClient
dalam pengujian saya, lalu memanggil HttpHelper.init()
untuk membuat yang sebenarnya. lalu bandingkan yang saya harapkan dan yang sebenarnya sama. Apakah saya benar?
Karena variabel dan metode dideklarasikan sebagai statis. Agak sulit untuk menulis unit test. Ada banyak postingan yang mengatakan membuat metode statis adalah praktik yang buruk. Namun dalam contoh saya, saya tidak tahu bagaimana cara menghindari mendeklarasikannya sebagai statis dan menyimpan satu instance CloseableHttpClient
.
Terima kasih!
httpClient
kesend()
(sehinggahttpClient
dapat dengan mudah diejek), atau diubah menjadi non-statis, dan menyuntikkanhttpClient
(sehinggahttpClient
dapat dengan mudah diejek). - person Andrew S   schedule 27.10.2020httpClient
tidak dapat menyimpan satu instance? - person rascee   schedule 27.10.2020