2013-05-18 50 views
5

我正在使用Struts 2.3.14进行我的应用程序...我需要在我的应用程序中进行一些单元测试...所以我使用的是junit4 ...但是当我在我的应用程序中使用ActionProxy测试中,它会显示NullPointerException ...Struts 2.3.14 junit test

我的测试代码:

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); 

和我的Action类是:

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:4‌​9) 
Testsuite: com.customize.rewards.SaveRewardsTest 

回答

1

您使用junit4,所以正确的测试用例类在这种情况下使用会StrutsJUnit4TestCase。它具有注释,运行时需要启动运行代码所需的初始模拟对象。特别是获取行动代理需要模拟request