我正在为我的应用程序使用Struts 2.3.14 ...我需要在我的应用程序中进行一些单元测试...所以我使用的是junit4 ...但是当我在我的测试中使用ActionProxy
时,它会显示NullPointerException
...
我的测试代码是:
ActionProxy proxy=getActionProxy("/customize/saveRewards");
SaveRewardsPlus rewards=(SaveRewardsPlus)proxy.getAction();
request.setParameter("list[0].img_id", "1");
request.setParameter("list[0].tag", "Test Tag");
request.setParameter("list[0].desc", "Test Desc");
String result=proxy.execute();
assertEquals("success", result);
,我的动作类是:
private List<RewardsBean> list;
public String execute() {
try {
Class.forName(DRIVER);
con = DriverManager.getConnection(CONSTR, USER, PWD);
for (RewardsBean rb : list) {
sql = "update rewards set tag=?,description=? where img_id=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, rb.getTag());
ps.setString(2, rb.getDesc());
ps.setInt(3, rb.getImg_id());
ps.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return SUCCESS;
}
/**
* @return the list
*/
public List<RewardsBean> getList() {
return list;
}
如何向动作类发送请求以及如何使用ActionProxy
...
请帮我改进.....
谢谢你提前......
我的struts.xml文件在下面给出.....
<struts>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
<action name="addRewards" class="com.customize.rewards.AddRewards">
<result name="success">index.jsp</result>
</action>
</package>
<include file="addrewards/struts-addrewards.xml"></include>
<include file="customize/struts-customize.xml"></include>
</struts>
,我的导入的xml文件在下面给出....
<struts>
<package name="customize" namespace="/customize" extends="struts-default">
<!--<action name="viewRewards" class="com.customize.rewards.ViewRewards">
<result>/customizeRewards/viewRewards.jsp</result>
</action> -->
<!-- New Rewards-->
<action name="viewRewards" class="com.customize.rewards.ViewRewards">
<result>/customizeRewards/viewRewardsPlus.jsp</result>
</action>
<action name="saveRewards" class="com.customize.rewards.SaveRewardsPlus">
<result name="success" type="redirect">viewRewards</result>
</action>
<!--/New Rewards-->
<!-- <action name="saveRewards" class="com.customize.rewards.SaveRewards">
<result name="success" type="redirect">viewRewards</result>
</action>-->
<action name="deleteRewards" class="com.customize.rewards.DeleteRewards">
<result name="success" type="redirect">viewRewards</result>
</action>
<action name="addRewards" class="com.customize.rewards.AddRewards">
<result name="success" type="redirect">viewRewards</result>
</action>
</package>
</struts>
我的堆栈跟踪....
java.lang.NullPointerException at
org.apache.struts2.StrutsTestCase.getActionProxy(StrutsTestCase.java:130) at
com.customize.rewards.SaveRewardsPlusTest.testExecute(SaveRewardsPlusTest.java:49)
Testsuite: com.customize.rewards.SaveRewardsTest
答案 0 :(得分:1)
您正在使用junit4
,因此在这种情况下使用的正确测试用例类将为StrutsJUnit4TestCase
。它具有在启动到运行代码所必需的init模拟对象时运行所需的注释。特别是获取动作代理需要模拟request
。