Struts 2.3.14 junit测试

Har*_*ath 5 java struts2 junit4 struts2-junit-plugin

我正在使用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);  
Run Code Online (Sandbox Code Playgroud)

我的行动班是:

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;
} 
Run Code Online (Sandbox Code Playgroud)

如何向动作类发送请求以及如何使用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>
Run Code Online (Sandbox Code Playgroud)

我导入的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>
Run Code Online (Sandbox Code Playgroud)

我的堆栈跟踪....

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
Run Code Online (Sandbox Code Playgroud)

Rom*_*n C 1

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