测试Spring 2.5表单控制器

时间:2013-05-29 16:41:48

标签: spring unit-testing

我正在将自动化测试添加到正在生产中的现有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()进行测试的错误的想法?

0 个答案:

没有答案