Если вам разрешено вносить изменения в класс SomeService, я бы порекомендовал вам сделать следующее:
class SomeService
{
//some private, static, final data members
public Map getService(String sNo, String uId, String en)
{
ResponseEntity <Map> response = getForEntity("https://someurl.com/someService", Map.class);
Map body = response.getBody();
//do something
HttpEntity<?> request = new HttpEntity <>(payLoad, headers);
//payload is Hash Map and headers is a LinkedMultiValueMap
ResponseEntity <Map> response = postForEntity(url, request, headers);
return response.getBody();
}
}
Как вы уже догадались, методы getForEntity
и postForEntity
были извлечены, а RestTemplateсоздается внутри - выполняет свою работу под прикрытием.А поскольку вы хотели с самого начала издеваться над RestTemplate, хорошо, что мы от него избавились - теперь мы можем шпионить за нашим сервисом без каких-либо объектов для насмешек.
@RunWith(MockitoJunitRunner.class)
class TestSomeService
{
@InjectMocks
@Spy
SomeService ser;
/*Some data members*/
@Before
{
HttpEntity <?> request = new HttpEntity<>(reqPayload, headers);
doReturn(new ResponseEntity <Map>(someMap, HttpStatus.OK))
.when(ser).getForEntity("theUrl", Map.class));
doReturn(new ResponseEntity <Map>(expectedMap, HttpStatus.OK))
.when(ser).postForEntity("anotherUrl", request, Map.class));
}
@Test
public void testGetService()
{
Map <String, Object> result = ser.getService("123", "abc", "QA");
}
}