Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mockito mocking restTemplate.postForEntity

I am trying to mock restTemplate.postForEntity method,

The actual method call is:

URI myUri = new URI(myString);
HttpEntity<String> myEntity ...


String myResponse = restTemplate.postForEntity(myUri, myEntity, String.class);

What I have in my test class is:

Mockito.when(restTemplate.postForEntity(any(URI.class), any(HttpEntity.class), eq(String.class))).thenReturn(response);

This does not work; I have tried several other permutations with no success either. Any suggestions appreciated, thanks.

By this does not work I mean that the actual method is called and not the mocked method (so the desired result is not returned etc.)

like image 426
Dax Durax Avatar asked Oct 13 '25 00:10

Dax Durax


2 Answers

The following code works for me - when(mockRestTemplate.postForEntity(anyString(), any(), eq(String.class))).thenReturn(response);

like image 181
Abhishek Singh Avatar answered Oct 14 '25 12:10

Abhishek Singh


This is what worked for me Firstly a resttemplate needs to be mocked in the test class

@Mock 
private RestTemplate mockRestTemplate;

Since ResponseEntity returns an Object create another method that returns the expected response wrapped in ResponseEntity

private ResponseEntity<Object> generateResponseEntityObject(String response, HttpStatus httpStatus){
    return new ResponseEntity<>(response, httpStatus);
}

In your test case, you can now mock the expected response as follows

String string = "result";
when(mockRestTemplate.postForEntity(anyString(), any(), any()))
        .thenReturn(generateResponseEntityObject(string, HttpStatus.OK));
like image 37
anayagam Avatar answered Oct 14 '25 13:10

anayagam