2

本番環境で動作している既存の 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 のビュー名が「redirect:createBroadcastsResults.htm」ではなく「createPublicBroadcastsForm」であるためです。

私が見たいくつかのことは、controller.handleRequest() が例外をスローしないこと、コントローラーの onSubmit() メソッドが呼び出されないこと、および isFormSubmission() のオーバーライドを行って、super を呼び出した後に値を出力することです。 .isFormSubmission() であり、true を返します。

また、handleRequest() の代わりにコントローラの onSubmit() を直接呼び出すようにテストを変更すると、テストはパスします。

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() を呼び出してテストしようとすると、どこが間違っているのかについて何か考えはありますか?

4

0 に答える 0