我正在通过扩展类“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);
}
}