【问题标题】:SpringBoot unit test controller mvc return always 404Spring Boot单元测试控制器mvc总是返回404
【发布时间】:2021-07-28 08:40:12
【问题描述】:

我正在尝试为我的控制器运行一个简单的单元测试,但对于我尝试MockMvc 的所有请求,我返回一个 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 {

}

但它什么也没改变。

我的测试有什么问题?

【问题讨论】:

    标签: spring-boot junit


    【解决方案1】:

    您的AirportController 映射到/airports。因此,您的测试也应该使用该路径,如下所示:

    this.mockMvc.perform(get("/airports/no-page"))
        .andDo(print())
        .andExpect(status().isOk());
    

    请注意,MvcMock 测试运行独立于配置的 servlet 上下文路径。

    【讨论】:

    • 我编辑了我的请求,我有 api 作为 servlet 上下文,所以我的 url 是 /api/airports/no-page
    • 我也更新了我的答案:MockMvc 不使用配置的 servlet 上下文路径。当您对 MVC 控制器单独运行测试时,servlet 上下文路径应该无关紧要。
    • 如果您发现指定上下文路径很重要(同样,通常情况并非如此),您可以按如下方式提供:var builder = MockMvcRequestBuilders.get("/api/airports").contextPath("/api");。然后您可以将构建器传递给MockMVC,如下所示:this.mockMvc.perform(builder).andDo(print()).andExpect(status().isOk());
    猜你喜欢
    • 2023-03-15
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多