2

Struts 2アクションクラスのjUnitを作成する必要があります.しかし、アクションクラスはParameterAwareパラメーターマップを受け取るインターセプターを実装してHashMapおり、アクションクラスはこのハッシュマップからすべてのリクエストパラメーターを取得します

アクション クラス:

public class BrokerAction extends ActionSupport implements ServletRequestAware, ServletResponseAware,SessionAware,
        ParameterAware {

    /** The parameters. */
    private Map parameters;

    @Override
    public void setParameters(final Map param) {
        this.parameters = param;
    }

   public String getParameterValue(final String param) {
        final Object varr = getParameters().get(param);
        if (varr == null) {
            return null;    
        }
        return ((String[]) varr)[0];
    }

   public String getBrokerDetails()throws PactException{
        String id = getParameterValue("id");
   }

Junit からのデータをリクエストに入れると、パラメータ マップに反映されません

ジュニット:

@Test
     public void testGetActionProxy() throws Exception {
        
         request.setAttribute("id", "23");
         ActionProxy proxy   =  getActionProxy("/getBrokerDetails");
         BrokerAction brokerAction = (BrokerAction) proxy.getAction();
         brokerAction.getBrokerDetails();
    }

リクエストデータがパラメータマップにどのように反映されるかを助けてください

4

2 に答える 2

0

単体テストは単純であるべきです - リクエストで属性を設定して ActionProxy を使用する代わりに、呼び出しsetParametersてパラメータを設定してみませんか? 単体テストが、テストしているクラスにないコードを呼び出している場合、テストはより複雑になり、コードに関係のない理由で失敗する傾向があります。

于 2014-03-10T09:47:33.843 に答える
0

リクエスト パラメータをテストするコード

<package name="test" namespace="/" extends="struts-default">
    <action name="getBrokerDetails" class="BrokerAction ">
        <result>/page.jsp</result>
    </action>
</package>


 public void testGetActionProxy() throws Exception {

     request.setParameter("id", "23");
     ActionProxy proxy   =  getActionProxy("/getBrokerDetails");
     BrokerAction brokerAction = (BrokerAction) proxy.getAction();

     String result = proxy.execute();
     assertEquals(Action.SUCCESS, result);

     assertEquals("23", brokerAction.getBrokerDetails());

}
于 2014-03-10T11:28:27.693 に答える