java - 使用 Mockito 从数据库模拟 CLOB

标签 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 (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(connection)CLOB 类的静态方法,因此不能用 Mockito 模拟。

您可以使用 Powermock 模拟静态.

关于java - 使用 Mockito 从数据库模拟 CLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19048912/

相关文章:

mysql - 有很多属性的表

sql-server - 由于 SQL Server 没有包,程序员如何绕过它呢?

java - 使用 Mockito 测试 servlet API

java - Java Runnable 运行的 JUnit 测试用例

java - 如何从 map 中的集合中删除元素

java - Spring MVC 和 "big forms"

oracle - sqlplus - 在 "IN"子句中使用绑定(bind)变量

java - 以编程方式更改更新插入属性

java - 删除多行开头的整数

java - Java中的模拟工厂模式