我写了一些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响应。
答案 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);
}