Spring MVC:如何从返回String的控制器方法unit testingModel的属性?
例如,
package com.spring.app; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home(final Model model) { model.addAttribute("msg", "SUCCESS"); return "hello"; } }
我想使用JUnit从home()
测试model
的属性及其值。 我可以将返回类型更改为ModelAndView
以使其成为可能,但我想使用String
因为它更简单。 但这不是必须的。
无论如何检查model
而不改变home()
的返回类型? 或者它无法帮助?
你可以使用Spring MVC Test :
mockMvc.perform(get("/")) .andExpect(status().isOk()) .andExpect(model().attribute("msg", equalTo("SUCCESS"))) //or your condition
这里有充分说明的例子
你可以使用Mockito。
例:
@RunWith(MockitoJUnitRunner.class) public HomeControllerTest { private HomeController homeController; @Mock private Model model; @Before public void before(){ homeController = new HomeController(); } public void testSomething(){ String returnValue = homeController.home(model); verify(model, times(1)).addAttribute("msg", "SUCCESS"); assertEquals("hello", returnValue); } }
我尝试使用副作用来回答这个问题。
@Test public void testHome() throws Exception { final Model model = new ExtendedModelMap(); assertThat(controller.home(model), is("hello")); assertThat((String) model.asMap().get("msg"), is("SUCCESS")); }
但我对此仍然不是很有信心。 如果这个答案有一些缺陷,请留下一些评论来改进/贬低这个答案。