Я работаю над приложением весенней загрузки, которое выполняет три внешних вызова API из сервисного уровня, поэтому при написании интеграционных тестов я пытаюсь переопределить фактический компонент RestTemplate
с помощью имитированного компонента RestTemplate
и при создании трех вызовы внешнего API, которые я указал для возврата некоторых данных
given(this.restTemplate.exchange(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(),
ArgumentMatchers.isA(new ParameterizedTypeReference<TestData1>() {
}.getClass()))).willReturn(ResponseEntity.accepted().body(new TestData1()));
given(this.restTemplate.exchange(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(),
ArgumentMatchers.isA(new ParameterizedTypeReference<TestData2>() {
}.getClass()))).willReturn(ResponseEntity.accepted().body(new TestData2()));
given(this.restTemplate.exchange(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(),
ArgumentMatchers.isA(new ParameterizedTypeReference<List<TestData3>>() {
}.getClass()))).willReturn(ResponseEntity.accepted().body(Arrays.asList(new TestData3())));
Но проблема в том, что когда вызывается метод restTemplate.exchange
, он возвращает null
в качестве ответа вместо ResponseEntity
с соответствующим телом
TestConfig класс
@TestConfiguration
@ActiveProfiles("test")
@Profile("test")
public class TestConfig {
@Bean
public RestTemplate restTemplae() {
return Mockito.mock(RestTemplate.class);
}
TestClass
@SpringBootTest(classes = { TestConfig.class })
@ActiveProfiles("test")
@Profile("test")
@RunWith(SpringJUnit4ClassRunner.class)
public class TestClass {
@Autowired
private RestTemplate restTemplate;
@Test
public void taskTest() {
//code
given(this.restTemplate.exchange(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(),
ArgumentMatchers.isA(new ParameterizedTypeReference<TestData1>() {
}.getClass()))).willReturn(ResponseEntity.accepted().body(new TestData1()));
given(this.restTemplate.exchange(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(),
ArgumentMatchers.isA(new ParameterizedTypeReference<TestData2>() {
}.getClass()))).willReturn(ResponseEntity.accepted().body(new TestData2()));
given(this.restTemplate.exchange(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(),
ArgumentMatchers.isA(new ParameterizedTypeReference<List<TestData3>>() {
}.getClass()))).willReturn(ResponseEntity.accepted().body(Arrays.asList(new TestData3())));
//code
}