使用Maven运行spockunit testing

在之前的项目中,我使用Spock测试框架对我的Java代码进行unit testing。 我发现这非常有效,所以我试图将Spock测试添加到我当前的项目中,该项目使用Maven作为其构建工具(之前的项目使用了Gradle)。 虽然我可以让Maven编译我的Spock测试(使用groovy-eclipse-compiler ),但我无法让Maven运行测试。

我做了一个简单的例子来演示我的2个文件的问题:

  • pom.xml
  • src/test/java/ASpec.groovy

pom.xml内容:

  4.0.0 my.group my-artifact 0.1-SNAPSHOT   junit junit 4.10   org.codehaus.groovy groovy-all 2.0.8 test   org.spockframework spock-core 0.7-groovy-2.0 test      org.apache.maven.plugins maven-compiler-plugin 3.1  groovy-eclipse-compiler    org.codehaus.groovy groovy-eclipse-compiler 2.8.0-01   org.codehaus.groovy groovy-eclipse-batch 2.1.8-01       

ASpec.groovy内容:

 import spock.lang.Specification class ASpec extends Specification { def "Test A"(){ // Always fail expect: false } } 

当我执行mvn clean test (或mvn clean install )时,我希望我的单个unit testing能够运行并失败。 在编译时,Maven不会运行它。 有没有人知道如何从Maven运行Spockunit testing(或者如果可能的话?)

(我没有把我的测试放在一个包中以保持示例简单。而且我已经将我的groovy代码放在src / test / java中以避免配置示例从另一个目录中获取源文件,再次保持示例为尽可能简单。)

Maven Surefire按名称查找测试类。 将类名更改为ATest ,或重新配置Surefire使用的名称模式。 spock-example项目的POM演示了如何执行后者。

这个答案纯粹是对@ PeterNiederwieser答案的补充。 在其中他提到您可以配置Surefire使用的名称模式。 这是一个对我有用的例子:

  org.apache.maven.plugins maven-surefire-plugin 2.18     **/*Test.java **/*Spec.java    

资源

正如我在评论中提到的,我不确定为什么**/*Spec.groovy不起作用,但我很高兴能够在这里使用正常的Spock约定。

我有同样的要求将Spock添加到我现有的Java Web应用程序中。 我试过彼得斯,但它对我不起作用。 gmavenplus-plugin以某种方式(不知道)用一个非常古老的谷歌lib替换了我的番石榴依赖,我的Spring应用程序破坏了抱怨一种不存在的方法。

经过两三次尝试之后,我终于能够集成我的Spock Unit测试和集成测试,更重要的是将Spock groovy类的编译与我现有的Java / Junit Spring / Hibernate应用程序隔离开来。

当然,如果我有摇篮,它就能解决问题……但这是一个遗留项目,因此我没有选择。

以下是我添加的插件。 请注意Spockunit testing以Spec结束。 Spock集成测试以IT结束(但最有可能是SpecIT)。 我将我的Spock测试放在src / test / groovy下。

    org.codehaus.gmavenplus gmavenplus-plugin 1.4     testCompile       ${project.basedir}/src/main/java/groovy  **/*.groovy      ${project.basedir}/src/test/groovy  **/*.groovy       maven-surefire-plugin 2.18.1  src/test/groovy src/test/java  **/*Spec.java  **/*Test.java      org.apache.maven.plugins maven-failsafe-plugin 2.20  false  **/*IT.java      integration-test verify      

这是我的依赖:

    org.codehaus.groovy groovy 2.4.7 test   org.spockframework spock-core 1.1-groovy-2.4   org.spockframework spock-spring 1.1-groovy-2.4   org.codehaus.groovy.modules.http-builder http-builder 0.7.1    cglib cglib-nodep 3.2.5   org.objenesis objenesis 2.6  

只是为了让你知道,我原来的POM绝对没有明确的插件。 所以我的项目有一个非常简单的POM。 所以,它应该适合你。 这是一个Java 1.7项目。

……最后,为了让你有信心这不是一个垃圾post,我做了多次测试,以确保上述工作:

  1. 只需在没有测试的情况下构建WAR,并在本地部署和冒烟测试
    mvn clean install -DskipTests -Dmaven.test.skip = true

  2. 做一个测试编译,看看是否也编译了Groovy Unit测试
    mvn -X clean test-compile

  3. 在没有集成测试的情况下进行干净安装(我确保它没有进行此测试)并查看是否运行了Groovyunit testing
    mvn clean install -DskipITs

  4. 只需运行集成测试
    mvn failsafe:集成测试

我本来希望包含上面的截图作为证据,但它必须被审查……所以,我真诚地希望这会帮助你,因为我正在努力使这个工作… Maven是一个巨大的主题区域。 祝你好运:=)