Spring Boot 单元测试控制器 mvc return 总是 404
SpringBoot unit test controller mvc return always 404
我正在尝试 运行 对我的控制器进行简单的单元测试,但对于所有请求,我都会尝试 MockMvc
returns 我遇到 404 错误。
这是一个控制器示例:
@RestController
@RequestMapping("/airports")
public class AirportController {
private final AirportRepository repository;
...
@GetMapping(value = "/no-page", produces = "application/json; charset=utf-8")
public List<Airport> noPage() {
try {
return repository.findAllByActive(true);
} catch (Exception e) {
throw new ResponseStatusException(
HttpStatus.INTERNAL_SERVER_ERROR, "Failed to retrieve from DB!", e);
}
}
}
还有一个测试:
@ActiveProfiles("test")
@SpringBootTest
@AutoConfigureMockMvc
public class AirportControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testAirportController() throws Exception {
this.mockMvc.perform(get("/api/airports/no-page"))
.andDo(print())
.andExpect(status().isOk());
}
}
(请求在 /api 因为它是我的 servlet 上下文)
状态永远不会是 200(应该是什么),但总是 404 未找到。
我也尝试创建这样的测试配置并将其导入我的测试:
@Configuration
@EnableWebMvc
@ComponentScan("com.project")
public class TestConfiguration implements WebMvcConfigurer {
}
但这并没有改变什么。
我的测试有什么问题?
您的 AirportController
映射到 /airports
。因此,您的测试也应该使用该路径,如下所示:
this.mockMvc.perform(get("/airports/no-page"))
.andDo(print())
.andExpect(status().isOk());
请注意,MvcMock
测试独立于配置的 servlet 上下文路径运行。
我正在尝试 运行 对我的控制器进行简单的单元测试,但对于所有请求,我都会尝试 MockMvc
returns 我遇到 404 错误。
这是一个控制器示例:
@RestController
@RequestMapping("/airports")
public class AirportController {
private final AirportRepository repository;
...
@GetMapping(value = "/no-page", produces = "application/json; charset=utf-8")
public List<Airport> noPage() {
try {
return repository.findAllByActive(true);
} catch (Exception e) {
throw new ResponseStatusException(
HttpStatus.INTERNAL_SERVER_ERROR, "Failed to retrieve from DB!", e);
}
}
}
还有一个测试:
@ActiveProfiles("test")
@SpringBootTest
@AutoConfigureMockMvc
public class AirportControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testAirportController() throws Exception {
this.mockMvc.perform(get("/api/airports/no-page"))
.andDo(print())
.andExpect(status().isOk());
}
}
(请求在 /api 因为它是我的 servlet 上下文)
状态永远不会是 200(应该是什么),但总是 404 未找到。 我也尝试创建这样的测试配置并将其导入我的测试:
@Configuration
@EnableWebMvc
@ComponentScan("com.project")
public class TestConfiguration implements WebMvcConfigurer {
}
但这并没有改变什么。
我的测试有什么问题?
您的 AirportController
映射到 /airports
。因此,您的测试也应该使用该路径,如下所示:
this.mockMvc.perform(get("/airports/no-page"))
.andDo(print())
.andExpect(status().isOk());
请注意,MvcMock
测试独立于配置的 servlet 上下文路径运行。