Struts2 2.3.24 使用 Strut2SpringTestCase 的测试用例(请求对象为空)

Test case for Struts2 2.3.24 using Strut2SpringTestCase (request object is coming as null)

我正在尝试为我的 Struts2 操作 classes 编写单元测试用例。我的测试 class 扩展 SpringStrutsTestCase class。我能够设置请求对象并能够获取操作并且操作也被调用但是在操作时它试图获取请求对象中设置的参数它抛出空指针异常即请求对象为空。下面是我的测试 class 的样子。非常感谢任何帮助。

    import org.apache.struts2.StrutsSpringTestCase;
    import org.junit.Test;

    import com.opensymphony.xwork2.ActionProxy;

    public class testClass extends StrutsSpringTestCase {

    @Test
    public void test1() throws Exception {
        try {
            request.setParameter("p1", "v1");
            request.setParameter("p2", "v2");
            ActionProxy proxy = getActionProxy("/actionName");
            MyActionClass loginAction = (MyActionClass) proxy.getAction();
            loginAction.execute();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public String[] getContextLocations() {
        String[] arr = new String[] { "one.xml", "two.xml", "three.xml" };
        return arr;
    }
}

这是我的操作class。

public class MyAction extends ActionSupport{
private String p1;
private String p2;

/*
Gettere and Setters of p1 and p2
*/
    public String execute() throws Exception {
        // return "success";
        logger.info("Login Action Called");
        String pv1= (String) request.getParameter("p1");// If I get value using this.pv1 it works fine but with this code it doesn't.
        String pv2= (String) request.getParameter("p2");
        return "success";
    }
}

为了测试动作调用,您需要调用 ActionProxyexecute 方法。通过调用您的操作的 execute,您只是调用操作的特定方法 class 而不是 S2 操作以及拦截器、结果等

正确的方法是:

ActionProxy proxy = getActionProxy("/actionName");
proxy.execute();

顺便说一句,如果您使用的是 JUnit 4,则应该使用 StrutsSpringJUnit4TestCase 而不是 StrutsSpringTestCase