Я хочу протестировать реализацию Tasklet
, которая использует @Autowired
RestTemplateBuilder
для построения RestTemplate
. RestTemplate
выполняет запрос. Я хочу издеваться над ответом на этот запрос.
@ContextConfiguration(classes = DogTasklet.class )
@RunWith(SpringRunner.class)
public class DogTaskletTest {
@MockBean
RestTemplateBuilder restTemplateBuilder;
private RestTemplate restTemplate = new RestTemplate();
@Autowired
private Tasklet sut;
@Before
public void setUp() throws Exception {
given(this.restTemplateBuilder.build()).willReturn(restTemplate);
}
}
Оператор given()
генерирует NPE, потому что экземпляр RestTemplateBuilder
равен null
. Что я пропустил?
Обновление: я изменил тест на следующий, который решает NPE, теперь у меня есть null ResponseEntity
во время sut.execute()
.
@RunWith(SpringRunner.class)
public class DogTaskletTest {
@TestConfiguration
static class TestConfig {
@Bean
RestTemplateBuilder restTemplateBuilder() {
RestTemplateBuilder restTemplateBuilder = mock(RestTemplateBuilder.class);
RestTemplate restTemplate = mock(RestTemplate.class);
ResponseEntity responseEntity = mock(ResponseEntity.class);
given(restTemplateBuilder.build()).willReturn(restTemplate);
given(restTemplate.execute(any(), any(), any(), any())).willReturn(responseEntity);
given(responseEntity.getBody()).willReturn("{}");
return restTemplateBuilder;
}
@Bean
DogTasklet sut() {
return new DogTasklet("string", restTemplateBuilder());
}
}
@Test
public void execute() throws Exception {
// when
sut.execute(stepContribution, chunkContext);
}
}