Search code examples
javaspring-bootjunitmockitowiremock

Connection refused when using wiremock


I have this piece of code in a Junit, where I clearly set the port to 8888

when(clientUtils.getLinkUrl(eq(HOSTELS_MICROSERVICE.name()), eq(HOSTELS_MICROSERVICE.name()), anyMap()))
                .thenReturn("http://localhost:8888/HOSTELS/HOSTELSMethods");

stubFor(com.github.tomakehurst.wiremock.client.WireMock.get("/HOSTELS/HOSTELS_LIST").willReturn(
                aResponse().withStatus(200)
                        .withHeader("Content-Type", APPLICATION_JSON_VALUE)
                        .withBody(ResourceUtils.getResourceFileAsString ("__files/HOSTELS.json"))));

but when I run the test I got this error on this line:

stubFor(com.github.tomakehurst.wiremock.client.WireMock.get("/HOSTELS/HOSTELS_LIST").willReturn(..

and the error:

wiremock.org.apache.http.conn.HttpHostConnectException: Connect to localhost:8080 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

Solution

  • For Java users

    Based on the WireMock docs.

    There are 3 possibilities to use WireMock in your tests :

    1. If you are using Wiremock as JUnit 4 rule to configure the port use :
    import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
    
    ...
    
    @Rule
    public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8888));
    
    1. If you are using new instance and start it from your Test class (for example @Before) :
    import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
    
    ...
    
    public class Test {
    
        WireMockServer wm;
    
        @BeforeEach
        void setUp() {
            wm = new WireMockServer(options().port(8888));
            wm.start();
        }
    
        @Test
        void test() {
            wm.stubFor(...);
        }
    }
    
    1. With static configuration of default instance (not using new instance in your test) :
    WireMock.configureFor(8888);
    

    For Kotlin users

    If you are using kotlin you can add actual wiremock instance to stubFor and verify calls like wm.stubFor() and configure the port like in option 3 of this answer.