I want to test a Tasklet
implementation which uses an @Autowired
RestTemplateBuilder
to build a RestTemplate
. The RestTemplate
executes a request. I want to mock the response of this request.
@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);
}
}
The given()
statement throws a NPE because the RestTemplateBuilder
instance is null
. What have I missed?
Update: I changed the test to the following which solves the NPE, now I have null ResponseEntity
during 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);
}
}