【发布时间】:2021-12-15 18:39:36
【问题描述】:
一段时间以来,我一直在努力为我的休息控制器进行 JUnit 测试。出于某种原因,每次我尝试运行它们时都会收到错误Status expected:<200> but was:<404>。这是我的控制器:
@RestController
@RequestMapping("/travels")
@RequiredArgsConstructor
public class TravelController {
private final TravelService travelService;
private final TravelOutputDtoMapper travelOutputDtoMapper;
@GetMapping
public List<TravelOutputDto> getAll() {
List<Travel> travels = travelService.getAll();
return travels.stream()
.map(travelOutputDtoMapper::travelToTravelOutputDto)
.collect(Collectors.toList());
}
}
这是我的测试:
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = TravelController.class)
@ContextConfiguration(classes = {
TravelOutputDtoMapper.class,
TravelOutputDtoMapperImpl.class
})
class TravelControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private TravelService travelService;
@Autowired
private TravelOutputDtoMapper travelOutputDtoMapper;
@Test
void testGetAll() throws Exception {
List<Travel> travels = mockTravelList();
Mockito.when(travelService.getAll()).thenReturn(travels);
mockMvc.perform(get("/travels"))
.andExpect(status().isOk());
}
private List<Travel> mockTravelList() {
// Dummy travel list
}
}
我认为原因与 TravelOutputDtoMapper 相关,就好像我将它从控制器中删除并且不尝试将其注入测试通过一样,但我找不到任何信息为什么它会这样做。自动装配的映射器有一个实例并且工作得很好。
这是映射器:
@Mapper(componentModel = "spring")
public interface TravelOutputDtoMapper {
@Mapping(target = "from", source = "entity.from.code")
@Mapping(target = "to", source = "entity.to.code")
TravelOutputDto travelToTravelOutputDto(Travel entity);
}
【问题讨论】:
-
可以添加
TravelOutputDtoMapper的代码吗?谢谢! -
@JoãoDias 我已经用它更新了我的问题
-
您是否在 application.properties 中为应用程序使用上下文?
-
是的,我已经链接了我的 maven 和 spring 配置文件,并将它们分成两个不同的配置,但是在测试 application.yml 中我已经覆盖了所有配置。
标签: spring spring-mvc junit spring-test mapstruct