在上面的例子,我们只是简单地运行了Action,那么Action是否正确执行以及返回的结果是不是我们想要的呢?
我们继续完善一下testSearchHotline()这个Method.
public void testSearchHotline() throws Exception{
setRequestPathInfo("/SearchHotline.do");
addRequestParameter("country", "CN");
actionPerform();
verifyNoActionErrors();
verifyForward("hotlineList");
assertNotNull(request.getAttribute("hotlineList"));
List hotlineList = (List) request.getAttribute("hotlineList");
for (Iterator it = hotlineList.iterator();it.hasNext();){
....
}
}
我们在actionPerform()后增加了几行语句来断定Struts Action是否正确执行.
verifyNoActionErrors() -- 判断Action里没有任何的Action;
verifyForward("hotlineList") -- 判断Action确实转发到hotlineList;
assertNotNull(request.getAttribute("hotlineList")) -- 判断Action确实返回了hotlineList并且不为空
到这里,我们已经基本上讨论完了StrutsTestCase的核心部分. 从头到尾,我们没有发布应用程序,也不需要Web服务器,对我们来讲,Struts Action就象普通的Java Class一样容易调试测试.这就是StrutsTestCase给我们带来的方便.
五、深入StrutsTestCase
除了以上我们用到的几个断定和校验方法外,StrutsTestCase还提供了其他几个方法便于我们测试Struts Action. 下面我一一讲述,具体的大家可以参考文档.
verifyActionErrors/Messages -- 校验ActionActionServlet controller 是否发送了ActionError或ActionMessage. 参数为ActionError/Message Key
verifyNoActionErrors/Messages --校验ActionActionServlet controller 没有发送ActionError或ActionMessage
VerifyForward -- 校验Action是否正确转发到指定的ActionForward.
VerifyForwardPath -- 校验Action是否正确转发到指定的URL
verifyInputForward -- 校验Action是否转发到Action Mapping里的input属性
verifyTilesForward/verifyInputTilesForward--和以上类似,应用程序使用到tiles时用的
六、关于Web.xml和Struts-Config.xml
缺省情况下,StrutsTestCase认为你的Web.xml和struts-config.xml的路径分别是:
/WEB-INF/web.xml和/WEB-INF/struts-config.xml
1. 假如你的web.xml/struts-config.xml的路径是
d:/app/web/WEB-INF/web.xml(struts-config.xml)的话,就需要把d:/app/web加到classpath.
2. 假如你的struts config是strust-config-module.xml,
那么必须调用setConfigFile()设置你的struts config文件
七、结束语
J2EE应用程序的测试在开发过程中占有相当重要的位置,利用StrutsTestCase能极大方便你测试基于Struts的应用程序.
