Java Maven/Surefire可以';t在同一个项目中执行Spock和JUnit 环境 爪哇 马文 --从 问题
我分叉添加java测试目录和HelloJUnitTest.java=> Spock测试可以执行,但JUnit测试不能执行 快照Java Maven/Surefire可以';t在同一个项目中执行Spock和JUnit 环境 爪哇 马文 --从 问题,java,maven,junit,spock,maven-surefire-plugin,Java,Maven,Junit,Spock,Maven Surefire Plugin,我分叉添加java测试目录和HelloJUnitTest.java=> Spock测试可以执行,但JUnit测试不能执行 快照 mvn清洁测试 只有斯波克测试 mvn清洁测试-Dtest=HelloJUnitTest JUnit测试在目标/测试类中生成* mvn清洁测试-Dtest=HelloSpocSpec mvn-X包括测试类别 好的,我已经看过你的项目了。正如您所说,它只是Spock示例项目,升级为运行Spock 2测试。顺便说一句,它还应该进一步升级,因为在当前
- mvn清洁测试
- mvn清洁测试-Dtest=HelloJUnitTest
- JUnit测试在目标/测试类中生成*
- mvn清洁测试-Dtest=HelloSpocSpec
- mvn-X包括测试类别
- 好的,我已经看过你的项目了。正如您所说,它只是Spock示例项目,升级为运行Spock 2测试。顺便说一句,它还应该进一步升级,因为在当前的配置编译中,它不适用于当前的Java版本,但这是离题的,我只是提到它,因为我遇到了一个问题,然后降级到Java 8,以便快速重现您的实际问题。JUnit测试的包名也不是问题,尽管默认包总是很难看,就像Spock测试一样
Spock1.x基于JUnit4,但Spock2.x基于JUnit5平台。这也是Surefire在分析项目依赖关系时自动找到的。如果希望Surefire并行运行多个引擎,则需要将相应的提供程序配置为插件依赖项,如前所述
在您的情况下,只需将以下内容添加到POM中:
maven surefire插件
3.0.0-M4
错误的
**/*Test.java
**/*java规范
org.apache.maven.surefire
surefire-junit47
3.0.0-M4
org.apache.maven.surefire
surefire junit平台
3.0.0-M4
在POM中显式地向JUnit 4.12或4.13添加测试范围的依赖项也是有意义的,因为JUnit 4.12在当前POM中只是一个可传递的依赖项。但后来的Spock2版本可能会删除该依赖项,因为它不是真正需要的。我想这已经发生在2.0立方米的情况下了。所以要小心
在这一变化之后,Maven说:
[INFO]——maven surefire插件:3.0.0-M4:test(默认测试)@spock示例---
[信息]
[信息]-------------------------------------------------------
[信息]
[信息]-------------------------------------------------------
[信息]正在运行HelloJUnitTest
[信息]测试运行:1,失败:0,错误:0,跳过:0,运行时间:0.059秒-在HelloJUnitTest中
[信息]
[信息]结果:
[信息]
[信息]测试运行:1,失败:0,错误:0,跳过:0
[信息]
[信息]
[信息]-------------------------------------------------------
[信息]
[信息]-------------------------------------------------------
[信息]正在运行数据库驱动程序NSPEC
[信息]测试运行:3,失败:0,错误:0,跳过:0,运行时间:0.171秒-在DatabaseDrivenSpec中
(...)
[信息]
[信息]结果:
[信息]
[信息]测试运行:39,失败:0,错误:0,跳过:0
如果您决定从JUnit4升级到JUnit5,那么配置可能会变得更容易,因为Spock和JUnit都使用相同的提供程序。在这种情况下,请添加JUnit5依赖项,以便您的测试可以导入相应的测试注释和断言方法
更新:在@khmarbaise对使用vintage engine发表评论后,我完全同意这是更好的解决方案,我想向您展示如何做到这一点,而不是向Surefire添加插件依赖项。(因此,如果要使用此解决方案,可以删除这些内容):
org.junit.vintage
朱尼特老式发动机
5.5.2
测验
为什么是5.5.2版而不是5.6.2版?为了避免版本冲突和后续关于vintage engine在Groovy目录中找不到测试的警告。这只是因为此示例项目中的POM仍然使用Spock 2.0-M1 BOM。正如我所说,它应该得到更新。但对于这个版本,它只是工作,因为它依赖于与此配置中的Spock相同的JUnit5平台版本
顺便说一句,现在Maven先执行Spock测试,然后执行JUnit 4测试,因此这两个测试的日志输出顺序是相反的。好的,我看了一下您的项目。正如您所说,它只是Spock示例项目,升级为运行Spock 2测试。顺便说一句,它还应该进一步升级,因为在当前的配置编译中,它不适用于当前的Java版本,但这是离题的,我只是提到它,因为我遇到了一个问题,然后降级到Java 8,以便快速重现您的实际问题。JUnit测试的包名也不是问题,尽管默认包总是很难看,就像Spock测试一样 Spock1.x基于JUnit4,但Spock2.x基于JUnit5平台。这也是Surefire在分析项目依赖关系时自动找到的。如果希望Surefire并行运行多个引擎,则需要将相应的提供程序配置为插件依赖项,如前所述 在您的情况下,只需将以下内容添加到POM中:
maven surefire插件
3.0.0-M4
错误的
**/*Test.java
**/*java规范
org.apache.maven.surefire
surefire-junit47
3.0.0-M4
org.apache.maven.surefire
surefire junit平台
3.0.0-M4
在POM中显式地向JUnit 4.12或4.13添加测试范围的依赖项也是有意义的,因为JUnit 4.12在当前POM中只是一个可传递的依赖项。但后来的Spock2版本可能会删除该依赖项,因为它不是真正需要的。我想这已经发生在2.0立方米的情况下了。所以要小心
在这次改变之后,我
$ java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
$ mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: C:\Program Files\JetBrains\IntelliJ IDEA 2019.2.3\plugins\maven\lib\maven3
Java version: 1.8.0_231, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_231\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"