У меня есть метод, который я пытаюсь проверить
public List<User> getUsers(String state) {
LOG.debug("Executing getUsers");
LOG.info("Fetching users from " + state);
List<User> users = null;
try {
users = userRepo.findByState(state);
LOG.info("Fetched: " + mapper.writeValueAsString(users));
}catch (Exception e) {
LOG.info("Exception occurred while trying to fetch users");
LOG.debug(e.toString());
throw new GenericException("FETCH_REQUEST_ERR_002", e.getMessage(), "Error processing fetch request");
}
return users;
}
Ниже мой тестовый код:
@InjectMocks
private DataFetchService dataFetchService;
@Mock
private UserRepository userRepository;
@Test
public void getUsersTest_exception() {
when(userRepository.findByState("Karnataka")).thenThrow(new Exception("Exception"));
try {
dataFetchService.getUsers("Karnataka");
}catch (Exception e) {
assertEquals("Exception", e.getMessage());
}
}
Ниже мой интерфейс UserRepository:
@Repository
public interface UserRepository extends CrudRepository<User, Integer> {
public List<User> findByState(String state);
}
Когда я запускаю мой тест как тест Junit, он дает мне следующую ошибку:
org.mockito.exceptions.base.MockitoException:
Checked exception is invalid for this method!
Invalid: java.lang.Exception: Exception occurred
Любая идея о том, как решить эту проблему? Заранее спасибо.
findByState
не может генерироватьException
. В частности, обратите внимание на то, что (1) вы должны перехватывать наиболее конкретное возможное исключение, в данном случаеDataAccessException
, и (2) для устранения неполадок вредно маскировать основное исключение; обязательно используйте цепочный конструктор, который принимаетThrowable cause
. - person chrylis -cautiouslyoptimistic-   schedule 27.09.2019