2013-05-18 14 views
5

Sto usando Struts 2.3.14 per la mia applicazione ... Ho bisogno di un test di unità nella mia applicazione ... quindi sto usando junit4 ... ma quando uso ActionProxy nel mio Test, mostrerà NullPointerException ...Struts 2.3.14 junit test

il mio codice di prova è:

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

e il mio Class 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; 
} 

Come posso inviare richiesta alla classe di azione e come utilizzare ActionProxy ... Please help me per migliorare ..... Grazie in anticipo ......

mio file struts.xml si riporta di seguito .....

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

e il mio file XML importato è il seguente ....

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

mia stacktrace ....

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 

risposta

1

Si utilizza junit4, quindi la corretta classe di test case da utilizzare in questo caso sarebbe StrutsJUnit4TestCase. Ha annotazioni necessarie per essere eseguito all'avvio per avviare gli oggetti mock necessari per eseguire il codice. Un particolare proxy di azione richiede il simulato request.