Как убрать дубликаты названий маршрутов при тестировании - PullRequest
0 голосов
/ 27 января 2019

У меня есть простой контроллер 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}.Но могут быть и требования изменить имя параметра.

Расскажите, пожалуйста, как организовать код и устранить дублирование.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Я думаю, что лучшее решение - ввести переменную

public static final String PATH = "/employees"; в EmployeeController, чтобы вы могли ссылаться на путь "/ employee" в любом месте

0 голосов
/ 27 января 2019

Вы можете использовать

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

для получения пути из @RequestMapping контроллера ("/ employee")

"/ employee"

...