[英]Spring MVC: How to unit test Model's attribute from a controller method that returns String?
例如,
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
这里有充分说明的例子
我尝试使用副作用来回答这个问题。
@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"));
}
但我对此仍然不是很有信心。 如果这个答案有一些缺陷,请留下一些评论来改进/贬低这个答案。
你可以使用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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.