测试时如何去除重复的路由名称

How to remove duplicate names of routes when testing

我有一个简单的控制器 REST:

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeRepository repository;

    @GetMapping("")
    List<Employee> all() {
        return repository.findAll();
    }

    @GetMapping("/{id}")
    Employee one(@PathVariable Long id) {
        return repository
                .findById(id)
                .orElseThrow(() -> new EmployeeNotFoundException(id));
    }
}

此外,我为此控制器编写了一个测试。

public class EmployeeControllerTest {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders
                .webAppContextSetup(context)
                .build();
    }

    @Test
    public void all() throws Exception {
        this.mockMvc.perform(get("/employees"))
                .andExpect(status().isOk())
                .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(jsonPath("$", hasSize(2)))
                .andExpect(jsonPath("$[0].id", is(1)))
                .andExpect(jsonPath("$[0].name", is("John")))
                .andExpect(jsonPath("$[0].role", is("admin")))
                .andExpect(jsonPath("$[1].id", is(2)))
                .andExpect(jsonPath("$[1].name", is("Mike")))
                .andExpect(jsonPath("$[1].role", is("user")));
    }

    @Test
    public void one() throws Exception {
        int id = 1;

        this.mockMvc.perform(get("/employees/{id}", id))
                .andExpect(status().isOk())
                .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(jsonPath("id", is(1)))
                .andExpect(jsonPath("name", is("John")))
                .andExpect(jsonPath("role", is("admin")));
    }
}

但问题是路由“/employees”的名称重复太多了。 而且如果有要求改路由名称,我就得改一百次测试。很差。

还有如何在使用基本路由和参数时消除重复,这里只有一个参数:{id}。 但是也可能有要求改参数的名字。

请说明您是如何组织代码并消除重复的。

您可以使用

EmployeeController.class.getAnnotation(RequestMapping.class).value()[0];

从控制器的 @RequestMapping("/employees") 获取路径

"/employees"

我认为最好的解决办法是引入一个

public static final String PATH = "/employees"; EmployeeController 中的变量,因此您可以在任何地方引用“/employees”路径