Home > other >  How mock RestTemplate.exchange()?
How mock RestTemplate.exchange()?

Time:04-28

I have tried almost everything but I keep getting a org.mockito.exceptions.misusing.PotentialStubbingProblem when trying to mock RestTemplate.exchange

Here is what I am trying to do:

@Test
    void headerTest() {
    var request = getRequest();

    when(restTemplate.exchange(
            ArgumentMatchers.any(),
            ArgumentMatchers.eq(HttpMethod.POST),
            ArgumentMatchers.<HttpEntity<MultiValueMap<String,Object>>>any(),
            ArgumentMatchers.<Class<String>>any())
    )
            .thenReturn(ResponseEntity.ok("{\"access_token\":\"token\"}"));

    client.getResponse(request,
            "HI");

    assertEquals(1,request.hashCode());
}

I have tried everything but I keep getting the following error:

org.mockito.exceptions.misusing.PotentialStubbingProblem: 
Strict stubbing argument mismatch. Please check:
 - this invocation of 'exchange' method:
    restTemplate.exchange(
    null,
    POST,
    <{grant_type=[client_credentials]},[AUTHORIZATION:"Basic ", Content-Type:"application/x-www-form-urlencoded"]>,
    class java.lang.String
);
    -> at com.client.Client.getToken(WeightedAverageCostClient.java:148)
 - has following stubbing(s) with different arguments:
    1. restTemplate.exchange(
    null,
    null,
    null,
    null
);

Using lenient() I am getting a response of NULL.

What am I doing wrong ?

CodePudding user response:

This is what worked for me:

when(restTemplate.exchange(
                ArgumentMatchers.any(),
                ArgumentMatchers.eq(HttpMethod.POST),
                ArgumentMatchers.<HttpEntity<MultiValueMap<String, Object>>>any(),
                ArgumentMatchers.<Class<String>>any(),
                (Object) any())
        )
                .thenReturn(ResponseEntity.ok("{\"access_token\":\"token\"}"));

CodePudding user response:

What is the reason to mock the restTemplate itself? The generic recommendation is to avoid the restTemplate invocation at all by using fake services.

In case of the invocation is absolutely mandatory the in-memory stub solution like mock-server could be used during the tests.

  • Related