为什么我的 Oracle DataSource 仅在单元测试时出现重放错误?

Arl*_*rlo 2 oracle jdbc spring-boot

我的 Spring Boot 1.5.17 (Spring 4.3.20) 服务器在 bootRun 或部署时工作正常。

但是,我的 Oracle 数据源仅在单元测试时失败:

java.lang.AssertionError:服务器正在发送非空重播上下文,但我们的 replayModes=[]

Google 搜索此错误没有确切的结果。

我能够使用不同的 Oracle 数据库进行单元测试。

我在完整的应用程序测试上下文中收到错误

@RunWith(SpringRunner.class)
@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
        classes = { TestingUserConfiguration.class, Application.class }
)
Run Code Online (Sandbox Code Playgroud)

以及单个数据源配置和服务

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {
        MyDbConfig.class,
        MyService.class
})
Run Code Online (Sandbox Code Playgroud)

oracle.jdbc.pool.OracleDataSource都有oracle.jdbc.replay.OracleConnectionPoolDataSourceImpl错误。UCP 没有区别。

OracleConnectionPoolDataSourceImpl有一个不同的错误:

java.sql.SQLException:不支持的功能

尝试从 OJDBC 12.2 升级到 2018.3,没有区别。

以前有人见过这个错误吗?关于为什么它只出现在 Spring 单元测试中的任何想法?

小智 5

经过一番绞尽脑汁后,我发现在测试套件中这样做:

static {
 ClassLoader.getSystemClassLoader().setPackageAssertionStatus("oracle.jdbc.driver", false);  
}
Run Code Online (Sandbox Code Playgroud)

解决了我的问题,我确定这是 oracle.jdbc.driver.T4CTTIfun 类中的错误