我养成了这样做的习惯,所以在我的单元测试中我可以检查添加到模型中的内容:
@RequestMapping(value = "/Foo", method = RequestMethod.GET)
public ModelAndView goHome()
{
ModelandView mav = new ModelAndView("foobar.jsp");
mav.addObject("bar", new Bar());
return mav;
}
这样做会更好:
@RequestMapping(value = "/Foo", method = RequestMethod.GET)
public String goHome(final Model model)
{
model.addAttribute("bar", new Bar());
return "foobar.jsp";
}
答案 0 :(得分:6)
差异只是语义上的。如果你没有创建ModelAndView
对象,Spring将为你做。
通常情况下,第二种方法更为可取,因为单元测试更容易,特别是如果您传递Map
而不是模型。
编辑澄清测试(基于jUnit
)。我发现以下签名更可取:
@RequestMapping(value = "/Foo", method = RequestMethod.GET)
public String goHome(final Map model) {
model.addAttribute("bar", new Bar());
return "foobar.jsp";
}
这使我们无需了解Spring
即可创建测试
@Test
public void testGoHome() {
// Setup
Controller controller = ...
Map<String, Bar> model = new HashMap<String, Bar>();
// Test
assertEquals("foobar.jsp", controller.goHome(model));
assertNotNull(model.get("bar"));
}
此示例基于Map
,但如果您愿意,也可以是ModelMap
甚至Model
。