2013-05-18 4 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); 

и мое действие Класс:

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 ... Пожалуйста, помогите мне улучшить ..... Thankyou заранее ......

мой 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> 

мой 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 

ответ

1

Вы используете junit4, поэтому правильный класс тест, чтобы использовать в этом случае будет StrutsJUnit4TestCase. Он содержит аннотации, необходимые для запуска при запуске, чтобы инициализировать объекты, необходимые для запуска вашего кода. Особый прокси-сервер действия требует макета request.