我需要创建用于处理DataAccessException的JUnit测试,但当我尝试的时候
throw new DataAccessException();
接收:
Cannot instantiate the type DataAccessException
为什么?我能做什么?谢谢。
fdbelqdn1#
throw new DataAccessException("this was the reason") {};
并且您会得到一个从DataAccessException派生的匿名类。
1yjd4xko2#
为什么?因为DataAccessException就是abstract class,所以不能示例化抽象类。我能怎么办?如果选中层次结构:
DataAccessException
extended by java.lang.RuntimeException extended by org.springframework.core.NestedRuntimeException extended by org.springframework.dao.DataAccessException
因为NestedRuntimeException也是抽象的,所以可以抛出一个new RuntimeException(msg);(不推荐),也可以按照另一个答案的建议--使用一个具体的类。
NestedRuntimeException
new RuntimeException(msg);
6za6bjd03#
除了使用TransientDataAccessException.class之外,还可以使用
doThrow(new TransientDataAccessException("Oops! Something went wrong.") {}).when(myMock).callSomeMethod(param1,param2);
92dk7w1h4#
如果您查看源代码,您会注意到它是一个抽象类,请仔细查看:
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; }
fruv7luv5#
在我的测试模拟中,我需要返回一个带有DataAccessException的Mono.error。我示例化了抽象类的一个匿名类,它对我很有效:
Mono.error(new DataAccessException("exception message"){})
5条答案
按热度按时间fdbelqdn1#
并且您会得到一个从DataAccessException派生的匿名类。
1yjd4xko2#
为什么?
因为
DataAccessException
就是abstract class,所以不能示例化抽象类。我能怎么办?
如果选中层次结构:
因为
NestedRuntimeException
也是抽象的,所以可以抛出一个new RuntimeException(msg);
(不推荐),也可以按照另一个答案的建议--使用一个具体的类。6za6bjd03#
除了使用TransientDataAccessException.class之外,还可以使用
92dk7w1h4#
如果您查看源代码,您会注意到它是一个抽象类,请仔细查看:
你知道抽象类是不能扩展的...
但是你可以用其他的方式来使用它,这是一种使用它的方式,例如:
fruv7luv5#
在我的测试模拟中,我需要返回一个带有DataAccessException的Mono.error。我示例化了抽象类的一个匿名类,它对我很有效: