Sam*_*amo 3 java junit spring-mvc
我是Spring MVC的新手,我正在学习如何测试我的控制器.我有一个简单的测试:
@Test
public void shouldDoStuff()
{
request.setRequestURI("/myCompany/123");
ModelAndView mav = controller.getSomeDatas("123", request);
assertEquals(mav.getViewName(), "company");
assertTrue(mav.getModel().containsKey("companyInfo"));
assertTrue(mav.getModel().containsKey("rightNow"));
assertEquals(mav.getModel().get("companyInfo"), "123");
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器动作:
@RequestMapping(value = "/myCompany/{companyGuid}", method = RequestMethod.GET)
public ModelAndView getSomeDatas(@PathVariable("companyGuid") String myGuid, HttpServletRequest request)
{
/*ModelAndView mav = new ModelAndView("company");
mav.addObject("companyInfo", myGuid);
mav.addObject("rightNow", (new Date()).toString());
return mav;*/
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("companyInfo", myGuid);
myModel.put("rightNow", (new Date()).toString());
return new ModelAndView("company", "model", myModel);
}
Run Code Online (Sandbox Code Playgroud)
我在第一个断言上设置了断点.在Eclipse的Display窗口中,mav.getModel()完全返回我期望的内容:
mav.getModel()
(org.springframework.ui.ModelMap) {model={rightNow=Fri Nov 05 13:30:57 CDT 2010, companyInfo=123}}
Run Code Online (Sandbox Code Playgroud)
但是,任何访问该模型中的值的尝试都会失败.例如,我假设以下内容可行:
mav.getModel().get("companyInfo")
null
mav.getModel().containsKey("companyInfo")
(boolean) false
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,get("companyInfo")返回null,而containsKey("companyInfo")返回false.
当我用未注释的部分替换控制器的注释部分时,我的测试工作得很好,但后来我的jsp视图中断,因为我试图通过说$ {model.companyInfo}之类的东西来访问模型的属性,等等
所以我需要知道两件事中的至少一件(但如果你能回答两件事,那就更好了):
任何帮助表示赞赏.
san*_*alp 11
对于问题1,Model提供了一种将模型属性作为映射返回的方法.在您的测试中,您可以:
Map<String,Object> modelMap = mav.getModel().asMap();
modelMap.get("companyInfo");
Run Code Online (Sandbox Code Playgroud)
假设您将companyInfo设置为模型,它应该在那里.
关于问题的第2部分,我认为其他人已经回答了这个问题.
好的,现在很清楚了!
尝试:
mav.getModel().get("model");
mav.getModel().containsKey("model");
Run Code Online (Sandbox Code Playgroud)
你在你的控制器中调用了你的模型图"模型"......
在你的jsp中,我建议使用Jstl:
<%@page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" language="java"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
${model.companyInfo}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43896 次 |
| 最近记录: |