【问题标题】:Spring Boot - How to test that Model attribute was added from configuration file?Spring Boot - 如何测试从配置文件中添加的模型属性?
【发布时间】:2018-03-08 03:43:48
【问题描述】:

我有一个控制器,它将application.properties 的属性添加到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();
        }

}

提前致谢。

【问题讨论】:

    标签: spring-boot junit mocking mockito


    【解决方案1】:

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

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

    编辑:你也不想在这里调用你的控制器上的 new:

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

    通过你自己的实例化它不再是一个 Spring bean 并且 @Value 注释将不会为你正确地注入到这个类中。相反,您应该自动连接您的控制器并使用它来构建您的 MockMvc。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-04
      • 2020-06-05
      • 2019-04-26
      • 2018-11-14
      • 2017-01-04
      • 2017-07-25
      • 2019-04-15
      • 2016-08-15
      相关资源
      最近更新 更多