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

时间:2019-01-27 17:09:11

标签: java spring spring-boot spring-mvc spring-mvc-test

我有一个简单的控制器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}。 但是可能还需要更改参数名称。

请告诉您如何组织代码并消除重复。

2 个答案:

答案 0 :(得分:1)

我认为最好的解决方案是引入一个

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

答案 1 :(得分:0)

您可以使用

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

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

  

“ /员工”