如何模拟特定的 URL 路径?

问题描述

我在测试期间使用 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 更改具有模拟服务器主机/端口的任何属性。