2017-09-26 11 views
0

私はModelオブジェクトにapplication.propertiesから属性を追加し、コントローラを持っている:Springブート - 設定ファイルから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(); 
     } 

} 

感謝。

答えて

0

単体テストがこれらのプロパティを取得するためには、application.propertiesのコピーがsrc/test/resourcesフォルダにあることを確認する必要があります。

また、テストクラスに@SpringBootTestの注釈が付いていることを確認して、プロパティのロードに関連する設定がテストにロードされるようにしてください。

EDIT:あなたもここであなたのコントローラに新しいコールする必要はありません:

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

を、それはもはやのSpring Beanであると@value注釈が正しく、この中に注入されることはありません、それを自分でinstatiatingないことであなたのためのクラス。代わりにあなたのコントローラーをオートワイヤーして、これを使ってMockMvcをビルドしてください。

@Autowired 
private WebController webController; 

@Before 
public void setUp() { 
    this.mockMvc = MockMvcBuilders.standaloneSetup(webController).build(); 
} 
関連する問題