2016-06-09 5 views
2

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 
+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

+0

Ich habe auch eine Frage in den Google-Gruppen geschrieben, noch keine Aktivitätsaktivierungen. – Raf

Antwort

0

This helfen könnte, und es ist von der offiziellen Funken java Website so könnte es die richtige Methode , oder zumindest die eine empfohlene betrachtet werden.

Verwandte Themen