SpringBootTest注解在Maven test命令中失效问题求助
测试类添加了@SpringBootTest注解,在IntelliJ IDEA中运行正常,但执行mvn test命令时,Spring上下文初始化日志不显示,@Autowired注入对象为null。使用spring-boot 2.5.6版本。
测试类截图:
pom.xml配置:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.graalvm.compiler</groupId> <artifactId>compiler</artifactId> <version>22.3.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.10.0</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.0</version> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> <distributionManagement> <repository> <id>releases</id> <name>Release Repositories</name> <url>http://43ac054091.zicp.vip:18081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <name>Snapshot Repositories</name> <url>http://43ac054091.zicp.vip:18081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
报错日志:
[ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 2.152 s <<< FAILURE! - in com.example.jdbctest.ApplicationTest [ERROR] selectplaninfo Time elapsed: 0.001 s <<< ERROR! java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'companyServiceImpl': Unsatisfied dependency expressed through field 'companyDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'companyDao' defined in file [S:\CDS\forAnton\testSpring\huatengbase-jdbc-test-2\huatengbase-jdbc-test-2\target\classes\com\example\jdbctest\dao\CompanyDao.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'companyDao' defined in file [S:\CDS\forAnton\testSpring\huatengbase-jdbc-test-2\huatengbase-jdbc-test-2\target\classes\com\example\jdbctest\dao\CompanyDao.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver [ERROR] run Time elapsed: 0 s <<< ERROR! java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'companyServiceImpl': Unsatisfied dependency expressed through field 'companyDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'companyDao' defined in file [S:\CDS\forAnton\testSpring\huatengbase-jdbc-test-2\huatengbase-jdbc-test-2\target\classes\com\example\jdbctest\dao\CompanyDao.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'companyDao' defined in file [S:\CDS\forAnton\testSpring\huatengbase-jdbc-test-2\huatengbase-jdbc-test-2\target\classes\com\example\jdbctest\dao\CompanyDao.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver Caused by: java.lang.IllegalStateException: Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver [INFO] [INFO] Results: [INFO] [ERROR] Errors: [ERROR] ApplicationTest.run » IllegalState Failed to load ApplicationContext [ERROR] ApplicationTest.selectplaninfo » IllegalState Failed to load ApplicationContex... [INFO] [ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.981 s [INFO] Finished at: 2023-08-09T23:40:09+04:00 [INFO] Final Memory: 40M/467M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.0:test (default-test) on project huatengbase-jdbc-test: There are test failures. [ERROR] [ERROR] Please refer to S:\CDS\forAnton\testSpring\huatengbase-jdbc-test-2\huatengbase-jdbc-test-2\target\surefire-reports for the individual test results. [ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream. [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
从报错根因Cannot load driver class: Huatengxdb.jdbc.driver.HuatengxdbDriver可以判断,核心问题是Maven执行测试时找不到华腾数据库的JDBC驱动,IDEA能正常运行是因为它可能通过本地库或其他方式加载了该驱动。结合配置细节,需要修复以下问题:
1. 补充华腾数据库JDBC依赖
pom.xml中仅配置了MySQL驱动,但实际使用的是Huatengxdb,需添加对应JDBC驱动依赖。若驱动不在公共Maven仓库,需通过私服或本地安装引入:
<dependency> <groupId>com.huateng</groupId> <!-- 替换为实际groupId --> <artifactId>huatengxdb-jdbc-driver</artifactId> <!-- 替换为实际artifactId --> <version>对应版本号</version> <!-- 替换为实际版本号 --> <scope>runtime</scope> </dependency>
如果是本地jar包,需先用maven-install-plugin安装到本地仓库,再添加上述依赖。
2. 修复JUnit依赖冲突
pom.xml同时引入了JUnit 4(junit:junit)和JUnit 5的vintage引擎,且版本不匹配。Spring Boot 2.5.6默认依赖JUnit 5,建议删除单独的junit:junit依赖,并调整vintage引擎版本:
<!-- 删除该依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!-- 调整vintage引擎依赖,去掉手动指定的版本,由Spring Boot parent统一管理 --> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <scope>test</scope> </dependency>
3. 升级Maven Surefire插件
当前使用的maven-surefire-plugin版本2.22.0较老,建议升级到与Spring Boot 2.5.6兼容的版本(如2.22.2):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> </plugin>
4. 验证Maven配置一致性
检查IDEA的Maven配置与命令行Maven是否一致(比如是否使用了不同的settings.xml),确保命令行Maven能访问到华腾驱动的依赖源(私服或本地仓库)。
内容的提问来源于stack exchange,提问作者Alesya Podrez

