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

测试请求参数的代码

<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 回答
0

单元测试应该很简单——而不是在请求上设置属性并使用 ActionProxy,为什么不直接调用setParameters来设置参数呢?如果您的单元测试调用不在您正在测试的类中的代码,那么由于与您的代码无关的原因,它会变得更加复杂并且容易失败。

于 2014-03-10T09:47:33.843 回答