У меня есть простой контроллер 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")));
}
}
Но проблема в том, что слишком много дублирования именимаршрута "/ сотрудники".И если будут требования изменить название маршрута, мне придется сменить сотню тестов.Очень плохо.
Также, как устранить дублирование при использовании базового маршрута и параметра, здесь пока только один параметр: {id}.Но могут быть и требования изменить имя параметра.
Расскажите, пожалуйста, как организовать код и устранить дублирование.