8

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.

4

3 回答 3

25

DataAccessException是一个抽象类,不能实例化。而是使用具体类之一,例如new DataRetreivalFailureException("this was the reason")或创建您自己的类:

throw new DataAccessException("this was the reason") {};

你会得到一个从 DataAccessException 派生的匿名类。

于 2012-06-24T15:50:07.130 回答
5

为什么?

仅仅因为DataAccessException抽象类。您不能实例化抽象类。

我能做些什么?

如果您检查层次结构:

extended by java.lang.RuntimeException
              extended by org.springframework.core.NestedRuntimeException
                  extended by org.springframework.dao.DataAccessException

由于NestedRuntimeException也是抽象的,你可以抛出一个new RuntimeException(msg);(不推荐)。您可以选择其他答案的建议-使用其中一个具体类。

于 2012-06-24T15:39:22.870 回答
0

如果您查看源代码,您会注意到它是一个抽象类,请查看:

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;
}
于 2018-06-23T15:28:33.053 回答