Ich habe ein paar ältere Fragen hier bei SO nachgeschlagen und die meisten von Ihnen sagen, testen Sie nicht eine void-Methode.Testen Sie eine void-Methode mit einer ausgehenden HTTP-Anfrage
Ich habe eine Methode, die eine HTTP-Anfrage an einen Server sendet, und ich denke, ich sollte noch testen, dass, selbst wenn die Methode ungültig ist? Wenn nicht, bitte sagen Sie mir, warum, weil viele Tutorials bei dzone zum Beispiel erwähnen, dass Sie Ruhe-Anfragen testen sollten.
Wenn ich es testen sollte, bitte helfen Sie mir zu beantworten, was Ich habe zu testen und wie ich, dass es da Leere nichts zurückliefert. Wenn du ein anderes "Nein" hier siehst, sag mir bitte, ich möchte so viel wie möglich verbessern. Hier
ist die Methode:
private void buy(double price) {
final String timestamp = String.valueOf(System.currentTimeMillis());
final String amount = String.valueOf(observer.requestedAmount);
final String ressouce = GetValuesTypes.getRessource("user").get(observer.getRelatedUser);
String queryArgs = "wwww.doSomething.com/" + ressouce;
String hmac512 = HMAC512.hmac512Digest(queryArgs);
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(GetValuesTypes.getURL());
post.addHeader("Key", GetValuesTypes.getKey());
post.addHeader("Sign", hmac512);
try {
post.setEntity(new ByteArrayEntity(queryArgs.getBytes("UTF-8")));
} catch (UnsupportedEncodingException e) {
System.out.println("Exception in run");
}
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("command", "order"));
params.add(new BasicNameValuePair("ressource", ressource));
params.add(new BasicNameValuePair("rate", String.valueOf(rate)));
params.add(new BasicNameValuePair("amount", amount));
params.add(new BasicNameValuePair("timestamp", timestamp));
try {
post.setEntity(new UrlEncodedFormEntity(params));
CloseableHttpResponse response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
Scanner in = new Scanner(entity.getContent());
String orderNumber = "";
while (in.hasNext()) {
orderNumber = in.nextLine();
}
String[] findOrderNumber = orderNumber.split(".");
long lastOrderNumber = -1;
try {
lastOrderNumber = Long.valueOf(findOrderNumber[3]);
} catch (NumberFormatException exception) {
System.out.println("NumberFormatException");
} finally {
if (lastOrderNumber != -1) {
observer.setOrderNumber(lastOrderNumber);
}
}
in.close();
EntityUtils.consume(entity);
httpClient.close();
} catch (IOException e) {
System.out.println("Exception occured during process");
}
}
Persönlich, wenn ich das Bedürfnis hatte, eine private Methode zu testen (und ich versuche es nicht), würde ich den Modifikator "private" entfernen und die Methode mit com.google.common.annotations.VisibleForTesting kommentieren – Stormcloud