Mockito と TDD は初めてだと言わざるを得ません..使用する理由を見つけるのに苦労しています..特に次のような問題を見つけた場合..「RegisterUser」メソッドをテストしたい私のUserServiceクラス..Spring MVC 3.0.6、Hibernate、Mavenなどを使用しています..
@Override
public void registerUser(User user, UserRoles userRole) throws DataAccessException, UserExistingException {
checkExistingUser(user);
user.addRole(new Role(userRole));
String password = encryptPassword(user);
userRepository.makePersistent(user);
sendWelcomeEmail(user.getFirstname(), user.getUsername(), password, user.getEmail());
}
private void checkExistingUser(User user) throws UserExistingException {
List<User> users = userRepository.findByCriteria(Restrictions.or(Restrictions.eq("username", user.getUsername()), Restrictions.eq("email", user.getEmail())));
if (!CollectionUtils.isEmpty(users)) {
User userFound = users.get(0);
List<String> fields = new ArrayList<String>();
if (userFound.getUsername().equals(user.getUsername())) {
fields.add("username");
}
if (userFound.getEmail().equals(user.getEmail())) {
fields.add("email");
}
throw new UserExistingException(fields);
}
}
これをテストするには、「userRepository.findByCriteria ..」をモックする必要があり、次の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 を使用する必要があるかもしれないと読みました..しかし、どのように? そして、私がマッチャーを使用する場合..それはまだ有効であり、何か違うものでテストを作成しますか?