я написал несколько тестов Junit4, который выглядит следующим образом:Struts2 Junit4 тестов аккумулировать ответы JSON с каждым выполнением действия
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", "[email protected]");
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
I там есть решение получить executeAction()
, чтобы вернуть фактический ответ JSON, а не конкатенировать ответы JSON от всех предыдущих исполнений.
это решило проблему. Хотя я принял '@ Before' неправильно, он выполняется перед каждым тестом на самом деле. Я не могу использовать '@ BeforeClass' до того, как mock object' request' недоступен. Есть ли что-то, что я могу использовать только ОДИН РАЗ перед началом всех тестов? –
@coding_idiot: не вызывать действие для входа вообще. Вместо этого логин логики без действия. –