Docker中RestAssured镜像无法运行JUnit5测试的问题求助
Docker中RestAssured无法运行JUnit5测试的问题排查与修复
核心问题原因
本地mvn clean test正常但Docker环境下JUnit5测试不执行,本质是Maven Surefire插件版本兼容问题+JUnit5依赖不完整:
- Docker镜像使用的
maven:3.3-jdk-8自带的Surefire插件版本过低(默认2.12.x),不支持JUnit5的测试发现与执行;而JUnit4是该版本插件原生支持的,所以降级后能正常运行。 - 你的pom.xml仅引入了JUnit5的API依赖,缺少运行测试必需的引擎依赖。
具体修复步骤
1. 补充JUnit5引擎依赖
在pom.xml的<dependencies>中添加junit-jupiter-engine依赖:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.3</version> <scope>test</scope> </dependency>
2. 配置兼容JUnit5的Surefire插件
在pom.xml中添加<build>节点,指定支持JUnit5的Surefire插件版本(至少2.22.0以上,这里用3.1.2):
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.9.3</version> </dependency> </dependencies> </plugin> </plugins> </build>
3. 修复Docker运行时的交互阻塞问题
测试代码中的Scanner sc = new Scanner(System.in);会导致Docker非交互式运行时卡住(无输入源),直接移除该行即可:
public static void generateReq() { // 移除Scanner相关代码 GenerateRequest requestbody = new GenerateRequest(); String user = RandomStringUtils.randomAlphanumeric(7); requestbody.setUserName(user+"ai"); String password = RandomStringUtils.randomAlphanumeric(7); requestbody.setPassword(password+"ai@!12345"); requestbodyget = requestbody.getJsonBody(requestbody.getUserName(),requestbody.getPassword()); System.out.println(requestbodyget); }
验证修复
- 重新构建镜像:
docker build -t koushick1996/myapiimage:3 .
- 运行镜像:
docker run koushick1996/myapiimage:3
内容的提问来源于stack exchange,提问作者koushick
相关产品推荐
相关产品推荐

