Я хотел бы протестировать мой 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);
}
}