Java 使用Mockito从数据库模拟CLOB

Java 使用Mockito从数据库模拟CLOB,java,oracle,mockito,Java,Oracle,Mockito,想知道是否有人能帮忙或做过类似的事情。我试图模拟从定制ClobFactory返回Oracle CLOB。我使用以下代码创建CLOB CLOB clob = CLOB.createTemporary(connection, false, CLOB.DURATION_SESSION); try (final Writer clobWriter = clob.setCharacterStream(1)) { clobWriter.write(profile); } catch (IOExcep

想知道是否有人能帮忙或做过类似的事情。我试图模拟从定制ClobFactory返回Oracle CLOB。我使用以下代码创建CLOB

CLOB clob = CLOB.createTemporary(connection, false, CLOB.DURATION_SESSION);
try (final Writer clobWriter = clob.setCharacterStream(1)) {
    clobWriter.write(profile);
} catch (IOException e) {
    throw new SQLException(e);
}
return clob;
在我的测试中,我设置了以下模拟

@Mock OracleDataSource        dataSource;
@Mock CreateProfileParameters parameters;
@Mock ClobDBAccess            clobDbAccess;
@Mock OracleConnection        connection;

@Mock ClobFactory clobFactory;
@Mock CLOB        clob;
@Mock Writer      clobWriter;

....

when(dataSource.getConnection()).thenReturn(connection);
when(CLOB.getDBAccess(connection)).thenReturn(clobDbAccess);
when(clobDbAccess.createTemporaryClob(connection, false, CLOB.DURATION_SESSION, (short) 0)).thenReturn(clob);
when(CLOB.createTemporary(connection, false, CLOB.DURATION_SESSION)).thenReturn(clob);
when(ClobFactory.getClob(connection, dataString)).thenReturn(clob);
但是每次运行测试时,我都会得到一个NullPointerException,指向第二行-

Stacktrace was: java.lang.NullPointerException
at oracle.sql.CLOB.getDBAccess(CLOB.java:1525) ...

以前有人试过这样的吗?还是我遗漏了另一个应该模拟的对象?

我以前没有见过
CLOB
类的
getDBAccess
方法。但是看看上面,在我看来,它可能是
final
,这意味着你不能用Mockito来存根它。我建议使用真正的
CLOB
,而不是模拟的。模拟值对象通常不是一个好主意,而
CLOB
肯定是一个值对象。

方法
CLOB。getDBAccess(connection)
CLOB
类的静态方法,因此不能用Mockito进行模拟


您可以使用模拟静态。

我尝试过使用值对象,但仍然引发了相同的异常-我的getClob方法是静态调用,如果是实例方法调用,这可能会起作用吗?