Spring单元测试报No suitable driver异常该如何配置数据库驱动
解决方案
1. 修正Sybase驱动的依赖范围
项目正常启动可加载驱动,单元测试加载失败,90%的原因是驱动依赖范围配置错误:
- Maven场景:检查
pom.xml中Sybase驱动的依赖不能配置为<scope>provided</scope>,设置为默认compile或者runtime均可,参考配置:
<dependency> <groupId>com.sybase</groupId> <artifactId>jconn4</artifactId> <version>你的驱动版本号</version> </dependency>
- Gradle场景:检查
build.gradle中驱动不能用compileOnly引入,改为implementation或者runtimeOnly即可。
2. 显式指定测试加载的配置文件
@SpringBootTest默认会优先加载src/test/resources下的配置文件,先确认测试目录下没有冲突的数据源配置,也可以在测试类上通过注解显式指定加载主目录的配置:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @TestPropertySource(locations = "classpath:application.yml") public class 你的测试类名 { // 测试逻辑 }
3. 手动注册驱动类
部分场景下测试类加载器的SPI机制失效,无法自动识别驱动,可以在测试前置方法中手动注册驱动:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class 你的测试类名 { @BeforeClass public void initDriver() throws ClassNotFoundException { Class.forName("com.sybase.jdbc4.jdbc.SybDriver"); } // 测试逻辑 }
4. 非数据库相关测试的跳过方案
如果当前单元测试不需要访问真实数据库,可以直接排除数据源相关的自动配置,跳过驱动加载逻辑:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, exclude = { DataSourceAutoConfiguration.class, LiquibaseAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) public class 你的测试类名 { // 测试逻辑 }
内容的提问来源于stack exchange,提问作者Justin Lam
相关产品推荐
相关产品推荐

