Spring Boot - 如何测试Model属性是从配置文件添加的?
问题描述:
我有一个控制器,它增加了属性从application.properties
到Model
对象: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();
}