Критерии ограничения Mockito с mockito - PullRequest
0 голосов
/ 13 декабря 2011

Я должен сказать, что я новичок в Mockito и TDD .. Я изо всех сил пытаюсь найти причину, чтобы использовать это .. особенно, когда я нахожу проблемы как следующая .. Я хотел бы проверить "RegisterUser""метод в моем классе UserService. Я использую Spring mvc 3.0.6, Hibernate, Maven и т. д.. "и я попробовал следующий тест junit

@Test(expected = UserExistingException.class)
public void registerExistingUserTest() throws DataAccessException, UserExistingException {
    User user = new User();
    user.setUsername("gfalco77");
    user.setEmail("Giuseppe.falco@gmail.com");
    List<User> users = new ArrayList<User>();
    users.add(user);


    Mockito.when(userRepository.findByCriteria(Restrictions.or(Restrictions.eq("username", user.getUsername()), Restrictions.eq("email", user.getEmail())))).thenReturn(users);
    userService.registerUser(user, UserRoles.ROLE_USER);
    Mockito.verify(userRepository).makePersistent(user);
}

Но кажется, что список" пользователи "всегда пуст ... В предыдущем посте я читал, что ограничения - это не один и тот же объект, и, возможно, мне придетсяиспользовать Matchers .. но как?И если я использую matchers .. это все еще допустимо создать тест с чем-то другим?

1 Ответ

3 голосов
/ 13 декабря 2011

Это не прямой ответ на ваш вопрос, но ваш тест написать сложно, потому что ваш класс обслуживания смешивает бизнес-код с кодом доступа к данным.Вызов findByCriteria должен быть инкапсулирован в метод более высокого уровня UserRepository, например

List<User> findByNameOrEmail(String name, String email)

. Вам нужно просто смоделировать этот простой метод в своем тесте и выполнить реальный модульный тест репозитория, которыйпроверяет, что findByNameOrEmail работает должным образом в тестовой базе данных.

Если ваш UserRepository предоставляет только такие общие методы, как findByCriteria или findByQuery, то это больше не является репозиторием, так как созданиеОтветственность за критерии или запрос несет вызывающая сторона, а не хранилище.Это не намного больше, чем использование сеанса Hibernate непосредственно в бизнес-сервисе.

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