Nei*_*ens 20 java groovy unit-testing maven spock
在之前的项目中,我使用Spock测试框架对我的Java代码进行单元测试.我发现这非常有效,所以我试图将Spock测试添加到我当前的项目中,该项目使用Maven作为其构建工具(之前的项目使用了Gradle).虽然我可以让Maven编译我的Spock测试(使用groovy-eclipse-compiler),但我无法让Maven运行测试.
我做了一个简单的例子来演示我的2个文件的问题:
pom.xmlsrc/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>
Run Code Online (Sandbox Code Playgroud)
内容ASpec.groovy:
import spock.lang.Specification
class ASpec extends Specification {
def "Test A"(){
// Always fail
expect: false
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行mvn clean test(或mvn clean install)时,我希望我的单个单元测试能够运行并失败.在编译时,Maven不会运行它.有没有人知道如何从Maven运行Spock单元测试(或者如果可能的话?)
(我没有把我的测试放在一个包中以保持示例简单.另外我将我的groovy代码放在src/test/java中以避免配置示例从另一个目录中获取源文件,再次保持示例为尽可能简单.)
mnd*_*mnd 23
这个答案纯粹是对@ 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>
Run Code Online (Sandbox Code Playgroud)
正如我在评论中提到的,我不确定为什么**/*Spec.groovy不起作用,但我很高兴能够在这里使用正常的Spock约定.
Pet*_*ser 20
Maven Surefire按名称查找测试类.将类名更改为ATest,或重新配置Surefire使用的名称模式.spock-example项目的POM 演示了如何执行后者.
| 归档时间: |
|
| 查看次数: |
18337 次 |
| 最近记录: |