Spock 测试不会 运行 使用由 start.spring.io 创建的新 spring-boot 项目

Spock test won't run with a new spring-boot project created by start.spring.io

Spock 测试 运行 在 IDE 中正常,但不会在 maven 构建中执行。

重现问题

  1. 转到 https://start.spring.io/ 并创建一个新的 Groovy / Maven 项目,保留所有其他默认值。
  2. 将 spock 依赖项添加到 pom:
<dependency>
  <groupId>org.spockframework</groupId>
  <artifactId>spock-core</artifactId>
  <version>1.3-groovy-2.5</version>
  <scope>test</scope>
</dependency>
  1. 在现有测试旁边添加名为 HelloSpec.groovy 的失败 spock 测试:
import spock.lang.Specification

class HelloSpec extends Specification {
  def "length of Spock's and his friends' names"() {
    expect:
    name.size() == length

    where:
    name     | length
    "Spock"  | 5
    "Kirk"   | 4
    "Scotty" | 6
    "Dave"   | 911
  }
}
  1. 将 maven surefire 插件添加到构建中,以便它知道选择 spock 测试。我知道这对于以 Spec 结尾的文件应该是自动的,但我还没有发现是这样。我也明白文件没有以 .java 结尾,它实际上是一个 .groovy 文件,随它去吧。
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <includes>
      <include>**/*Spec.java</include>
    </includes>
  </configuration>
</plugin>
  1. 运行 从命令行进行 mvn clean install。你会发现你在 false greenbar 上并且 spock 测试没有 运行.
  1. 删除 Spring 添加到您的 spring-boot-starter-tests 依赖项的 junit-vintage-engine 的排除项
<!--                <exclusion>-->
<!--                    <groupId>org.junit.vintage</groupId>-->
<!--                    <artifactId>junit-vintage-engine</artifactId>-->
<!--                </exclusion>-->
  1. 运行 从命令行进行 mvn clean install。 Spock 测试被拾取并且 运行 并且您的构建因测试失败
  2. 而正确失败