首页 > 解决方案 > 测试时有没有办法在 Spring 中获取 Controller 的“基本 URL”?

问题描述

我有一个看起来像这样的控制器类:

@RestController
@RequestMapping("controller")
public class Controller {
    @RequestMapping("foo")
    public String method() {
        return "foo'd the bar";
    }
}

我的测试看起来像这样:

@WebMvcTest(Controller.class)
public class ControllerTest {
    @Autowired
    private Controller controller;

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void canCreate() throws Exception {
        Assertions.assertThat(controller).isNotNull();
    }

    @Test
    public void canGetDummy() throws Exception {
        this.mockMvc.perform(get("/controller/foo")).andDo(print()).andExpect(status().isOk());
    }
}

这对我来说似乎有点脆弱,控制器的“基本 URL”至少在测试方法的n+1地方硬编码n。有没有办法配置测试来避免这种情况(所以我会写/foo而不是/controller/foo)?我可以使用静态变量,但似乎应该有一个更清洁的解决方案。

(或者我是否在想这个错误,并且必须编写完整路径是好的 - 在这种情况下,为什么?)

标签: javaspring-mvc

解决方案


完整路径/controller/foo是您正在测试的 Web API 的一部分。如果愿意,您可以将字符串部分提取为常量,但以一种或另一种方式将其直接包含在测试中是一件好事。


推荐阅读