Контроллер MockMvc REST - всегда возвращает пустое тело - PullRequest
0 голосов
/ 02 июня 2018

Я хотел бы протестировать мой REST-контроллер с помощью MockMvc, но я всегда получаю пустой ответ тела.

Мой AccountControllerUnitTest выглядит так:

@RunWith(SpringRunner.class)
@WebMvcTest(AccountRestController.class)
public class AccountRestControllerUnitTests {

@Autowired
private MockMvc mockMvc;

@MockBean(name = "dtoUtil")
private DtoUtil dtoUtil;

@MockBean
private AccountService accountService;

@Test
public void canRetrieveAll() throws Exception {
    when(accountService.findAll())
            .thenReturn(Collections.singletonList(AccountTestFixture.createAccount()));

    this.mockMvc.perform(get("/accounts")).andDo(print())
            .andExpect(status().isOk());
}}

accountService when mock работаеткак и ожидалось, вызов accountService.findAll() возвращает список с одним элементом учетной записи.

Если используется AccountRestController:

@RestController
@AllArgsConstructor
@RequestMapping("/accounts")
public class AccountRestController {
    private AccountService accountService;

    @Qualifier(dtoUtil)
    private DtoUtil dtoUtil;

    @GetMapping
    public List<AccountDto> getAccounts() {
        return accountService.findAll().stream()
                .map(dtoUtil::mapToDto)
                .collect(Collectors.toList());
    }

Выполнение теста приведет к MockHttpServletResponse стело, которое является null.

. Оно работает безупречно для моего обычного (не для отдыха с моделью) контроллера, с той лишь разницей, что он не использует DtoUtil.

Может ли это быть причиной того, что он постоянно возвращает ноль?

edit:

The DtoUtil:

@Component
public class DtoUtil{

    @Autowired
    private ModelMapper mapper;

    public AccountDto mapToDto(Account account) {
        return modelMapper.map(account, AccountDto.class);
    }
}

1 Ответ

0 голосов
/ 02 июня 2018

Добавить к тесту

when(dtoUtil.mapToDto(...)).thenCallRealMethod(); 
...