Тестирование Junit для аннотированного контроллера - PullRequest
2 голосов
/ 28 ноября 2011

Как я могу проверить следующий метод в моем контроллере

@RequestMapping(method = RequestMethod.POST)
    public String register(@Valid User user, BindingResult result) {

        if (result.hasErrors()) {
            return "users/registration";
        }

        // create user
        service.create(user);

        return "redirect:/";
    }

Как я могу проверить @Valid и BindingResult?

public void testRegister() {
        try {
        request.setMethod("POST");
        request.setRequestURI("/users");
            request.setParameter("email", "bla@gmail.com");
        request.setParameter("prename", "Cyril");
        request.setParameter("surname", "bla");
        request.setParameter("password", "123");
        request.setParameter("repeat", "123");
        request.setParameter("birthdate", "2000-01-01");
        request.setParameter("city", "Baden");


            ModelAndView mAv = adapter.handle(request, response, usersController);

            assertEquals("redirect:/", mAv.getViewName());
        } catch (Exception e) {
            fail();
        }
    }

спасибо

1 Ответ

1 голос
/ 29 ноября 2011

Для аннотации @Valid это выходит за рамки вашего модульного теста. Вы можете верить, что Spring Framework выполнит проверку для вас, установив BindingResult соответствующим образом.

Так что, на самом деле, вам просто нужно покрыть свой if чек на result.hasErrors() - и для этого вы должны насмехаться над BindingResult; вот как это сделать с Mockito :

...
@Mock
private BindingResult mockBindingResult

@Before
public void setupTest() {
    MockitoAnnotations.initMocks(this);
    // While the default boolean return value for a mock is 'false',
    // it's good to be explicit anyway:  
    Mockito.when(mockBindingResult.hasErrors()).thenReturn(false);
}

@Test
public void shouldStayOnRegistrationPageIfBindingErrors() {
    // Simulate having errors just for this test:
    Mockito.when(mockBindingResult.hasErrors()).thenReturn(true);

    ModelAndView mav = controller.register(user, mockBindingResult);

    // Check that we returned back to the original form:
    assertEquals("users/registration", mav.getViewName());
}

Я также считаю, что действительно полезно использовать Cobertura (и особенно плагин eCobertura Eclipse), чтобы визуально подтвердить, что каждая линия и ветвь покрыты модульными тестами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...