我有一个我正在尝试测试的方法
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;
}
Run Code Online (Sandbox Code Playgroud)
下面是我的测试代码:
@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());
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我的 UserRepository …
我对checked exception class在java中创建感到困惑.
许多文章都说可以创建自定义异常
class MyException extends Exception
{
//constructor defined
}
Run Code Online (Sandbox Code Playgroud)
由于RuntimeException也是从Exception类继承的.
是否无法创建仅涵盖Checked Exceptions的类?
或者我需要指定已检查异常的列表
class MyException extends IOException
{
//constructor defined
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,可能存在我会错过某些已检查异常的情况.
在 Java 中,检查异常和未检查异常都可以显式抛出,即通过throw语句抛出。此外,未经检查的异常如ArithmeticException和OutOfMemoryError可以在没有任何显式throw声明的情况下触发,如下所示:
public static void throwArithmeticException() {
int i = 1;
int j = i / 0;
}
public static void throwOutOfMemoryError() {
List<Object> list = new ArrayList<>();
while(true) {
list.add(new Object());
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,有没有什么方法可以触发检查的异常,例如IOException隐式,即不使用任何throw语句?
我是Java新手,我读到仅在编译时引发检查异常,即如果存在未处理或抛出的检查异常,程序将无法成功编译。如果有什么东西阻止编译器编译代码,那么我们可以删除它或以其他方式重新编码,这样问题就不会存在。
例如,如果我们试图打开系统中不存在的文件,我们不应该只是打开它。那么为什么需要处理/抛出这些异常呢?