I need to create JUnit test for handling of DataAccessException,
but when I try:
throw new DataAccessException();
Receive:
Cannot instantiate the type DataAccessException
Why? What can I do? Thanks.
DataAccessException是一个抽象类,不能实例化。而是使用具体类之一,例如new DataRetreivalFailureException("this was the reason")或创建您自己的类:
throw new DataAccessException("this was the reason") {};
你会得到一个从 DataAccessException 派生的匿名类。
为什么?
仅仅因为DataAccessException
是抽象类。您不能实例化抽象类。
我能做些什么?
如果您检查层次结构:
extended by java.lang.RuntimeException
extended by org.springframework.core.NestedRuntimeException
extended by org.springframework.dao.DataAccessException
由于NestedRuntimeException
也是抽象的,你可以抛出一个new RuntimeException(msg);
(不推荐)。您可以选择其他答案的建议-使用其中一个具体类。
如果您查看源代码,您会注意到它是一个抽象类,请查看:
package org.springframework.dao;
import org.springframework.core.NestedRuntimeException;
public abstract class DataAccessException extends NestedRuntimeException {
public DataAccessException(String msg) {
super(msg);
}
public DataAccessException(String msg, Throwable cause) {
super(msg, cause);
}
}
如您所知,抽象类无法扩展......
但是您可以以其他方式使用它,这是使用它的一种方式,例如:
public interface ApiService {
Whatever getSomething(Map<String, String> Maps) throws DataAccessException;
}