我开发了一些扩展org.apache.struts2.StrutsTestCase的JUnit测试。我使用struts.apache.org上的tutorial作为我的出发点。在启用Tiles之后的StrutsTestCase中NPE
一切工作正常,直到我修改我的简单的Web应用程序使用瓷砖。我的Tiles在应用程序中工作正常,但现在我的Action测试用例已停止工作。
我在org.apache.struts2.views.tiles.TilesResult.doExecute得到NullPointerException异常,当我运行下面的代码行:
ActionProxy proxy = getActionProxy("/displaytag.action");
日志显示了Struts 2动作被成功地执行,直到它会尝试将其交给TilesResult.doExecute。
我怀疑这是因为测试运行在容器之外,并且tiles.xml仅在web.xml中引用,因此我的StrutsTestCase测试不知道在tiles.xml中的何处找到定义。
这是有道理的吗?
我正在使用Struts 2.2.1.1和Struts发行版中包含的与tiles相关的jar(v.2.0.6)。
我会在我的StrutsTestCase中包含代码片段,但请注意,当我在Tomcat中的浏览器中运行应用程序时,所有内容都能成功运行,但只有在Tomcat之外运行StrutsTestCase时才会失败。在添加Tiles之前,测试用例已成功运行。
public class TagActionTest extends StrutsTestCase {
static Logger logger = Logger.getLogger(TagActionTest.class);
public void testCreateTagFail() throws Exception {
logger.debug("Entering testCreateTagFail()");
try {
request.setParameter("name", "");
ActionProxy proxy = getActionProxy("/createtag.action");
TagAction tagAction = (TagAction) proxy.getAction();
proxy.execute();
assertTrue("Problem There were no errors present in fieldErrors but there should have been one error present", tagAction.getFieldErrors().size() == 1);
assertTrue("Problem field 'name' not present in fieldErrors but it should have been",
tagAction.getFieldErrors().containsKey("name"));
} catch (Exception e) {
logger.debug("Error running testCreateTagFail()");
e.printStackTrace();
assertTrue("Error running testCreateTagFail()", false);
}
}
部分堆栈跟踪:
java.lang.NullPointerException
at org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:105)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
最后,任何人都可以解释协议是与StrutsTestCase的是什么?有一个教程页面用于struts.apache.org上的Struts 2,但是从Struts 1.3开始,SourceForge page for it还没有更新。另外,StrutsTestCase和MockStrutsTestCase之间的区别是什么
我迷迷糊糊翻过了同样的问题之前添加以下行
。贾斯汀,你是否设法解决并解决它? – mmalmeida 2012-01-27 17:24:57
@wild_oscar,不幸的是,没有。祝你好运 – Justin 2012-01-28 01:49:14
@Justin找到了解决办法? – 2013-12-04 14:58:54