나는 모기토와 TDD에 익숙하지 않다. 나는 그것을 사용하는 이유를 찾는데 어려움을 겪고있다. 특히 다음과 같은 문제를 발견했을 때 ... 나는 .. 나는 스프링 MVC 3.0.6, 최대 절전 모드, 메이븐 등 ..mockito 모의 제한 기준
@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);
}
}
지금 "는 조롱하기 위해 필요한이 물건을 테스트하기 위해 사용하고 내 UserService 클래스에"RegisterUser "방법을 테스트 할 userRepository.findByCriteria .. "그리고 난 다음 JUnit 테스트
@Test(expected = UserExistingException.class)
public void registerExistingUserTest() throws DataAccessException, UserExistingException {
User user = new User();
user.setUsername("gfalco77");
user.setEmail("[email protected]");
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를 사용한다면 ... 여전히 유효합니다. 뭔가 다른 테스트를 만드시겠습니까?
Mockito와 TDD에 대한 당신의 생각 : 나는 단위 테스트와 TDD에 익숙하지 않았지만 JUnit + Mockito 콤보를 사용하기 시작했을 때 즉시 그와 사랑에 빠졌습니다. 엄격한 테스트를 쉽게 수행 할 수있는 좋은 방법입니다. 코드 테스트. 내가 알기로 TDD의 요점은 그러한 개발 모델은 모든 프로그램의 기능에 대한 테스트가 항상 있는지 확인하여 새 업데이트가 무언가를 깨뜨렸을 때 즉시 알 수 있도록하는 것입니다. 그것은 아마 모든 프로젝트에 가장 적합한 개발 모델이 아니지만, 저는이 철학을 염두에두고 있습니다. –