Spring Boot - 如何测试Model属性是从配置文件添加的?

问题描述:

我有一个控制器,它增加了属性从application.propertiesModel对象:Spring Boot - 如何测试Model属性是从配置文件添加的?

@Value("${products}") 
private String prod; 

@GetMapping("/") 
public String greetingForm(Model model) throws IOException { 

    List<String> products = Arrays.asList(prod.split("\\s*,\\s*")); 

    model.addAttribute("products",products); 

    return "form"; 
} 

如何测试这个方法?我对单元测试相当陌生,所以任何建议,将不胜感激。我知道我必须以某种方式模拟Model,但每次我尝试运行我的测试时,我都会得到一个NullPointerException

我的测试:

private MockMvc mockMvc; 

@MockBean 
private Model model; 

@Before 
public void setUp() { 
    this.mockMvc = MockMvcBuilders.standaloneSetup(new WebController()).build(); 
} 



@Test 
public void testHomeRoute() { 

     try { 

      List<String> products = new ArrayList<String>(); 
      products.add("Product1"); 
      products.add("Product2"); 

      mockMvc.perform(get("/")) 
       .andExpect(MockMvcResultMatchers.view().name("form")) 
       .andExpect(MockMvcResultMatchers.model().attribute("products",products)); 
       ; 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

} 

在此先感谢。

您需要确保application.properties的副本位于src/test/resources文件夹中,以确保单元测试获取这些属性。

还要确保您的测试类用@SpringBootTest进行了注释,以便将用于加载属性的相关配置加载到您的测试中。

编辑:你也不想你的控制器在这里呼吁新:

this.mockMvc = MockMvcBuilders.standaloneSetup(new WebController()).build(); 

通过它自己instatiating它不再是一个Spring bean和@Value注释将不会被正确注射到这上课为你。相反,你应该自动连接你的Controller并使用它来构建你的MockMvc。

@Autowired 
private WebController webController; 

@Before 
public void setUp() { 
    this.mockMvc = MockMvcBuilders.standaloneSetup(webController).build(); 
}