2
我想弄清楚如何测试在中编写的网络/休息服务,并没有太多关于如何做到这一点的教程。由于Apache Spark
和之间的混淆而找到答案是很棘手的。测试Java Spark微服务应用程序,实现SparkApplication接口
我遇到了这个resource但我无法按预期的方式工作。这也有resource和 github的例子,但它们都可能使用嵌入式服务器。
无论如何,假设我有以下服务
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
我不知道这是*正确的测试方法*。考虑将你的问题发布到Java Spark谷歌组(我希望你会得到答复...)。您可以在Github上查找附加项目联系人。 – Stephan
我其实也在Google组中发布了一个问题,尚未进行任何活动激活。 – Raf