我正在将自动化测试添加到正在生产中的现有Spring 2.5代码库中。我试图在我的控制器中测试onSubmit()方法。
这是控制器视图的XML配置:
<property name="formView" value="createPublicBroadcastsForm" />
<property name="successView" value="redirect:createBroadcastsResults.htm" />
这是我的JUnit测试:
@Before
public void setup() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
}
@Test
public void displayForm() throws Exception {
ModelAndView mv = controller.handleRequest(request, response);
assertViewName(mv, controller.getFormView());
}
@Test
public void testSubmitCreate() throws Exception {
request.setMethod("POST");
request.addParameter("title", "qwerty");
request.addParameter("startDate", "02/22/2013 09:00 AM");
request.addParameter("hours", "1");
request.addParameter("minutes", "1");
request.addParameter("seconds", "1");
request.addParameter("repeats", "None");
ModelAndView mv;
try {
mv = controller.handleRequest(request, response);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
assertViewName(mv, controller.getSuccessView());
}
displayForm()中的断言通过,但testSubmitCreate()中的断言失败,因为ModelAndView中的视图名称是“createPublicBroadcastsForm”,而不是预期的“重定向:createBroadcastsResults.htm”
我看过的一些事情是controller.handleRequest()没有抛出异常,甚至没有调用控制器的onSubmit()方法,并且我重写了isFormSubmission()来打印值在调用super.isFormSubmission()之后,它返回true。
另外,如果我更改测试以直接调用控制器的onSubmit()而不是handleRequest(),则测试通过:
PublicBroadcastCommand command = new PublicBroadcastCommand();
command.setTitle("qwerty");
command.setStartDate(DateUtils.createDate(2013, 2, 22, 9));
command.setHours(1);
command.setMinutes(1);
command.setSeconds(1);
command.setRepeats("None");
ModelAndView mv = controller.onSubmit(request, response, command, null);
assertViewName(mv, controller.getSuccessView());
所以我想知道我是否应该通过调用handleRequest()或onSubmit()(或两者,其中onSubmit()是一个单元测试来测试控制器,而handleRequest()更像是一个集成测试)?还有任何关于我试图通过调用handleRequest()进行测试的错误的想法?