Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven/Surefire可以';t在同一个项目中执行Spock和JUnit 环境 爪哇 马文 --从 问题_Java_Maven_Junit_Spock_Maven Surefire Plugin - Fatal编程技术网

Java Maven/Surefire可以';t在同一个项目中执行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测试。顺便说一句,它还应该进一步升级,因为在当前

我分叉添加java测试目录和HelloJUnitTest.java=>

Spock测试可以执行,但JUnit测试不能执行

快照
  • 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"