想知道是否有人可以提供帮助或做过类似的事情。我正在尝试模拟从自定义 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/