【发布时间】:2018-06-02 16:16:35
【问题描述】:
我想使用 MockMvc 测试我的 REST 控制器,但我总是得到一个空的正文响应。
我的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。
这可能是它不断返回 null 的原因吗?
编辑:
DtoUtil:
@Component
public class DtoUtil{
@Autowired
private ModelMapper mapper;
public AccountDto mapToDto(Account account) {
return modelMapper.map(account, AccountDto.class);
}
}
【问题讨论】:
标签: java spring unit-testing spring-mvc mockmvc