使用WithServer和Server.forRouter进行集成测试

时间:2016-06-29 10:01:11

标签: playframework integration-testing

我正在通过扩展类“play.test.WithServer”来编写集成测试。 这是用于在我的Play服务中测试API。我的API向其他外部服务发送GET请求以检索数据。 我不想在集成测试期间发送GET请求,因此我尝试使用“Server.forRouter()”创建模拟外部服务。

当模拟服务运行时,由 WithServer 类启动的实际 testServer 不会运行。没有错误或例外。我只在连接到 testServer 时才会收到ConnectException。

仅当我使用Server.forRouter()以及 WithServer 创建模拟服务时,才会出现此问题。

参考: https://www.playframework.com/documentation/2.5.x/JavaFunctionalTest https://www.playframework.com/documentation/2.5.x/JavaTestingWebServiceClients

复制的示例代码:

public class HomeControllerIntegrationTest extends WithServer {

private Server server;

@Test
public void test() throws Exception {
    Logger.error("mock server");
    WSClient ws = WS.newClient(-1);
    CompletionStage<WSResponse> response = ws.url("http://localhost:" + server.httpPort() + "/hello").get();
    Logger.error("response mock server = " + response.toCompletableFuture().get().getBody());


    Logger.error("my test server");
    ws = WS.newClient(-1);
    response = ws.url("http://localhost:" + testServer.port() + "/status").get();
    Logger.error("response test server = " + response.toCompletableFuture().get().getBody());
}

@Before
public void setUp() throws Exception {
    Logger.error("before");
    server = Server.forRouter(new RoutingDsl()
            .GET("/hello").routeTo(() -> ok("Hello world"))
            .build(), Mode.TEST, 20000);
}

}

0 个答案:

没有答案