Struts2 Junit4测试会在每次执行动作时累积JSON响应

时间:2013-11-13 15:18:39

标签: struts2 struts2-json-plugin struts2-junit-plugin

我写了一些Junit4测试,看起来像这样:

public class TestCampaignList extends StrutsJUnit4TestCase<Object> {

    public static final Logger LOG = Logger.getLogger(TestCampaignList.class.getName());

    @Before
    public void loginAdmin() throws ServletException, UnsupportedEncodingException {
        request.setParameter("email", "nitin.cool4urchat@gmail.com");
        request.setParameter("password", "22");
        String response = executeAction("/login/admin");
        System.out.println("Login Response :  " + response);
    }

    @Test
    public void testList() throws Exception {
        request.setParameter("iDisplayStart", "0");
        request.setParameter("iDisplayLength", "10");
        String response = executeAction("/campaign/list");
        System.out.println("Reponse : " + response);

    }
}

两个操作都返回JSON结果,executeAction javadoc说:

For this to work the configured result for the action needs to be FreeMarker, or Velocity (JSPs can be used with the Embedded JSP plugin)

似乎它无法处理JSON结果,因此,第二个动作执行显示累积结果,例如result_for_second_action= result1 concatenate result2

是否有解决方案让executeAction()返回实际的JSON响应,而不是连接所有先前执行的JSON响应。

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您正在@Before方法中执行操作。这样,在setUp和测试方法之间不会调用StrutsJUnit4TestCase loginAdmin方法,并且您之前的请求参数会再次传递给它。您可以在测试方法中自己调用setUp方法。 在您的情况下,您实际上可以调用initServletMockObjects方法来创建新的模拟servlet对象,例如request。

@Test
public void testList() throws Exception {
    setUp();
    // or 
    // initServletMockObjects();

    request.setParameter("iDisplayStart", "0");
    request.setParameter("iDisplayLength", "10");
    String response = executeAction("/campaign/list");
    System.out.println("Reponse : " + response);

}