如何为具有多个模型属性的Controller编写单元测试

时间:2018-12-09 06:24:08

标签: java spring unit-testing spring-boot

我正在尝试为我的控制器编写一个单元测试,但是我需要帮助,在我的控制器之外有两个modelAttribute作为枚举可在所有控制器中使用,所以这是我的代码。请帮助我,我是新手测试单元。

@Autowired
private MaintenanceService maintenanceService;

@ModelAttribute("departments")
public List<Department> getDepartments(){
    return Arrays.asList(Department.values());
}

@ModelAttribute("servicetypes")
public List<ServiceType> getServiceTypes(){
    return Arrays.asList(ServiceType.values());
}

@GetMapping("/ListOfMaintenance")
public String showListOfMaintenancePage(Model model) {
    model.addAttribute("maintenance",new Maintenance());
    model.addAttribute("Maintenances",maintenanceService.retriveListOfMaintenance());
    return "List_Of_Maintenance";
}

1 个答案:

答案 0 :(得分:0)

我相信this article可以为您提供帮助。

测试类上的@WebMvcTest注释告诉spring不要显示应用程序的所有详细信息,而只显示与API相关的那些信息(对于您的Controller)。此外,它还为您提供了一个方便的工具-MockMvc类,您可以使用该类来“捕获”对控制器的请求,就好像它们是实际的HTTP调用一样。您还可以声明这些调用的输出,以验证您期望控制器应该执行的操作实际上是否是它所做的。看看:

@RunWith(SpringRunner.class)
@WebMvcTest
public class WebLayerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/"))
                    .andDo(print())
                    .andExpect(status().isOk())
                    .andExpect(content().string(containsString("Hello World")));
    }
}