使用 Maven 运行 spock 单元测试

2022-09-01 12:52:07

在之前的一个项目中,我使用Spock测试框架来单元测试我的Java代码。我发现这真的很有成效,所以我正在尝试将Spock测试添加到我当前的项目中,该项目使用Maven作为其构建工具(以前的项目使用Gradle)。虽然我可以让 Maven 编译我的 Spock 测试(使用),但我无法让 Maven 运行测试。groovy-eclipse-compiler

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

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

内容 :pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.group</groupId>
    <artifactId>my-artifact</artifactId>
    <version>0.1-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
            <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.0.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>0.7-groovy-2.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <compilerId>groovy-eclipse-compiler</compilerId>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-compiler</artifactId>
                        <version>2.8.0-01</version>
                    </dependency>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-batch</artifactId>
                        <version>2.1.8-01</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

内容 :ASpec.groovy

import spock.lang.Specification

class ASpec extends Specification {

    def "Test A"(){
        // Always fail
        expect: false
    }
}

当我执行(或)时,我希望我的单个单元测试被运行并失败。在编译时,Maven 不会运行它。有没有人知道如何从Maven运行Spock单元测试(或者如果可能的话?mvn clean testmvn clean install

(我没有把我的测试放在一个包里,以保持示例的简单性。此外,我还将我的时髦代码放在src / test / java中,以避免将示例配置为从其他目录中获取源文件,再次使示例尽可能简单。


答案 1

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18</version>
    <configuration>
        <includes>
            <!-- By default only files ending in 'Test' will be included, so also include support for Spock style naming convention -->
            <!-- Oddly enough for Groovy files, *Spec.groovy does not work, but *Spec.java does -->
            <include>**/*Test.java</include>
            <include>**/*Spec.java</include>
        </includes>
    </configuration>
</plugin>

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


答案 2

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


推荐