JHipster v7.9.x版本集成测试全部失败问题求助
问题:JHipster v7.9.x集成测试失败(Docker/TestContainers相关)
环境配置
Windows 10 22H2 build 19045.2251 (64 bit) OpenJDK Runtime Environment Temurin-16.0.2+7 node 16.17.0 npm 8.19.1 Gradle 7.5.1 MariaDB 10.6.8 Chrome 107.0.5304.107
项目JDL配置(myapp.jh)
application { config { baseName myapp, packageName com.mycompany.app, applicationType monolith, authenticationType jwt, cacheProvider ehcache, enableHibernateCache true, databaseType sql, devDatabaseType mariadb, prodDatabaseType mariadb, buildTool gradle, clientPackageManager npm, clientFramework angular, clientTheme minty, clientThemeVariant primary, testFrameworks [protractor, cypress], nativeLanguage en, languages [en, es], jhiPrefix myapp, jwtSecretKey "YjAwZDU2ODI3NzNjZjk0NjVhY2UzNGViZmY0YjY1ZGY2MDI5MTc5Y2FlZWYxNzE5Yjg5ZjMxOGZhZTgwZjA5NTFkN2VmNDM3ZGMyZDNjZTViNDAwYTg4NmNlMmM2ZDkxZTMwMDk5YmUxNWNkZmE0YTNiNDlhMGNhZmM4OTk1NmQ=" } }
操作步骤
- 安装JHipster v7.9.3:
npm install -g generator-jhipster - 导入JDL配置:
jhipster jdl myapp.jh - 构建应用:
gradle build
问题现象
构建过程无异常,但所有集成测试均失败,错误栈示例如下:
HibernateTimeZoneIT > storeLocalDateTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZone() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804 Caused by: java.lang.IllegalStateException at DockerClientProviderStrategy.java:257
尝试JHipster v7.9.2、v7.9.0版本均出现相同问题,直接执行gradle integrationTest也报错;降级至JHipster v7.8.1版本后,所有测试正常通过;跳过集成测试直接运行应用(./gradlew和npm start)可正常工作。
问题原因与解决方案
JHipster v7.9.x升级了TestContainers版本,对Docker环境的检测逻辑更严谨,错误根源是TestContainers无法找到可用的Docker环境来启动MariaDB测试容器。
修复步骤
确认Docker运行状态
确保Docker Desktop在Windows上处于运行状态,可通过执行docker ps验证是否能正常连接Docker守护进程。检查Docker环境配置
- 若使用WSL2后端,确保WSL2与Windows的Docker环境同步,且当前用户拥有Docker访问权限。
- 若自动检测失败,可手动指定Docker主机地址:
在src/test/resources/application-test.yml中添加:testcontainers: docker: host: tcp://localhost:2375 - 若使用WSL2终端运行测试,可设置环境变量:
export DOCKER_HOST=unix:///var/run/docker.sock
替代方案:使用嵌入式数据库
若本地无Docker环境,可修改测试配置改用H2嵌入式数据库:
修改src/test/resources/application-test.yml中的数据库配置:spring: datasource: url: jdbc:h2:mem:myapp;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE driverClassName: org.h2.Driver username: sa password: jpa: database-platform: org.hibernate.dialect.H2Dialect同时移除或注释项目中TestContainers相关的配置类(如
MariaDBTestContainerConfiguration.java)。
内容的提问来源于stack exchange,提问作者Mike Smith
相关产品推荐
相关产品推荐

