RestTemplateBuilder, издевающийся над @MockBean, равен нулю - PullRequest
0 голосов
/ 29 августа 2018

Я хочу протестировать реализацию 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);
    }
}

1 Ответ

0 голосов
/ 30 августа 2018

Благодаря Урошу я понял, что в своем утверждении given() я издевался не над тем методом. Поэтому не вернул высмеянный RestTemplate.

Я изменил given() на:

        given(restTemplate.exchange(
            anyString(),
            eq(HttpMethod.GET),
            any(HttpEntity.class),
            eq(String.class)
        )).willReturn(responseEntity);
...