Ich versuche herauszufinden, wie man einen Web/Rest-Service in geschrieben testen und es gibt nicht viele Tutorials, wie man das macht. Es ist schwierig, Antworten aufgrund von Verwechslungen zwischen Apache Spark
und zu finden.Java Spark Microservices-App testen, die SparkApplication-Schnittstelle implementiert
Ich stieß auf diese resource, aber ich konnte es nicht so funktionieren, wie ich erwartet hatte. Es gibt auch diese resource und Beispiele in github, aber sie alle verwenden wahrscheinlich Embedded-Server.
Wie auch immer, Unter der Annahme, dass ich den folgenden Dienst haben
public class RestService implements SparkApplication {
@Override
public void init() {
get("/", (req, res) -> "Hello World!");
}
}
Ich möchte die oben testen, um sicherzustellen es Hello World!
für HTTP GET
Anfragen machen oder nicht. Ich habe den folgenden Test:
public class RestServiceTest {
//not sure if this is a good practice????
final static RestService restService = new RestService();
@BeforeClass
public static void beforeClass() {
//I have seen tests that invoked className.main(null)
//but, I don't know if its good idea to do it here?
restService.init();
Spark.awaitInitialization();
}
@AfterClass
public static void afterClass() {
Spark.stop();
}
@Test
public void testRootRoute() throws IOException {
TestResponse res = makeRequest("GET", "/");
assertEquals(200, res.status);
assertNotNull(res.body);
assertEquals("Hello World!", res.body);
}
private TestResponse makeRequest(String method, String path) throws IOException {
URL url = new URL("http://localhost:4567" + path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(method);
connection.setDoOutput(true);
connection.connect();
String body = IOUtils.toString(connection.getInputStream());
return new TestResponse(connection.getResponseCode(), body);
}
private static class TestResponse {
public final String body;
public final int status;
public TestResponse(int status, String body) {
this.status = status;
this.body = body;
}
}
}
die oben Rennen, führt der Test erfolgreich aand der Ausgang ist unten dargestellt, aber meine größte Sorge ist, ob dies die richtige Methode zur Herstellung eines Webapp Prüfung richtet sich nicht in eingebetteten laufen Server (wenn SparkApplication implementiert ist und init()
übergangen wird)?
T E S T S
-------------------------------------------------------
Running com.company.test.RestServiceTest
[Thread-0] INFO org.eclipse.jetty.util.log - Logging initialized @238ms
[Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - == Spark has ignited ...
[Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >> Listening on 0.0.0.0:4567
[Thread-0] INFO org.eclipse.jetty.server.Server - jetty-9.3.6.v20151106
[Thread-0] INFO org.eclipse.jetty.server.ServerConnector - Started [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}
[Thread-0] INFO org.eclipse.jetty.server.Server - Started @330ms
[main] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >>> Spark shutting down ...
[main] INFO org.eclipse.jetty.server.ServerConnector - Stopped [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}
[main] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - done
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.291 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
Ich weiß nicht, ob es die * richtige Testmethode * ist. Stellen Sie sich vor, Ihre Frage an die Java Spark-Google-Gruppe zu senden (ich hoffe, Sie erhalten eine Antwort ...). Sie können bei Github nach zusätzlichen Projektkontakten suchen. – Stephan
Ich habe auch eine Frage in den Google-Gruppen geschrieben, noch keine Aktivitätsaktivierungen. – Raf