问题描述
我在测试期间使用 okhttp 来模拟我的 http 响应。
//Create a mock server
mockWebServer.start(8080)
mockWebServer.enqueue(MockResponse().setBody("").setResponseCode(HttpURLConnection.HTTP_OK))
然而,这对每条路径的响应都正常。
如何模拟特定网址而不是所有网址?
解决方法
使用调度器
Dispatcher dispatcher = new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest request) {
switch (request.getPath()) {
case "/get":
return new MockResponse().setResponseCode(200).setBody("test");
}
return new MockResponse().setResponseCode(404);
}
};
mockBackEnd.setDispatcher(dispatcher);
上面可以写在你的测试方法中。你可以在那里有一堆 URL 条件。
模拟网络服务器可以像这样启动一次:
public static MockWebServer mockBackEnd;
@BeforeAll
static void setUp() throws IOException {
mockBackEnd = new MockWebServer();
mockBackEnd.start();
}
@AfterAll
static void tearDown() throws IOException {
mockBackEnd.shutdown();
}
使用 @DynamicPropertySource
更改具有模拟服务器主机/端口的任何属性。