2016-06-09 73 views
2

我想弄清楚如何测试在中编写的网络/休息服务,并没有太多关于如何做到这一点的教程。由于Apache Spark和之间的混淆而找到答案是很棘手的。测试Java Spark微服务应用程序,实现SparkApplication接口

我遇到了这个resource但我无法按预期的方式工作。这也有resourcegithub的例子,但它们都可能使用嵌入式服务器。

无论如何,假设我有以下服务

public class RestService implements SparkApplication { 
    @Override 
    public void init() { 
     get("/", (req, res) -> "Hello World!"); 
    } 
} 

我想测试上面,以确保它Hello World!HTTP GET请求与否。我有以下测试:

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; 
     } 
    } 
} 

运行上面,测试成功执行A和下面的输出显示,但是,我主要关注的是这是否是测试 web应用程序的目的是在嵌入式无法运行的正确方法服务器(当SparkApplication被实现并且init()被覆盖时)?

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

我不知道这是*正确的测试方法*。考虑将你的问题发布到Java Spark谷歌组(我希望你会得到答复...)。您可以在Github上查找附加项目联系人。 – Stephan

+0

我其实也在Google组中发布了一个问题,尚未进行任何活动激活。 – Raf

回答

0

This或许有帮助,它从官方火花Java网站的所以它可能被认为是正确的方法,或至少推荐一个。