测试时如何去除重复的路由名称
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”路径
我有一个简单的控制器 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”路径