4

I am using okhttp to mock my http responses during my tests.

//Create a mock server
mockWebServer.start(8080)
mockWebServer.enqueue(MockResponse().setBody("").setResponseCode(HttpURLConnection.HTTP_OK))

However, this responds to every path as OK.

How do I mock a specific url instead of all of them?

opticyclic
  • 7,412
  • 12
  • 81
  • 155

1 Answers1

5

Using Dispatcher

        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);

Above can be written inside your test method. You can have a bunch of URLs conditions there.

The mockwebserver can be started once like:

   public static MockWebServer mockBackEnd;

    @BeforeAll
    static void setUp() throws IOException {
        mockBackEnd = new MockWebServer();
        mockBackEnd.start();
    }


    @AfterAll
    static void tearDown() throws IOException {
        mockBackEnd.shutdown();
    }

Use @DynamicPropertySource to change any property with mockserver host/port.

Dhananjay
  • 1,140
  • 1
  • 12
  • 28