groovy spock 测试无法在同一个包中找到 java class
groovy spock test unable to find java class in same package
我是 spock 测试的新手,我遇到了一个我无法弄清楚的棘手问题。我不确定我做错了什么
我有一个简单的javaclass
./src/main/java/com/twg/sample/model/PrimeNumberCalculator.java
package com.twg.sample.model;
import org.springframework.stereotype.Service;
import java.util.stream.IntStream;
@Service
public class PrimeNumberCalculator {
public int[] getPrimeNumbers(int end) {
return IntStream.rangeClosed(1, end)
.filter(number -> !IntStream.rangeClosed(2, number / 2).anyMatch(i -> number % i == 0))
.toArray();
}
}
我有一个简单的 groovy spock 测试
./src/test/groovy/com/twg/sample/model/PrimeNumberCalculatorSpec.groovy
package com.twg.sample.model
import spock.lang.Specification
class PrimeNumberCalculatorSpec extends Specification{
def "test prime numbers"(){
given:
def primeCal = new PrimeNumberCalculator()
expect:
[1, 2, 3, 5, 7] == primeCal.getPrimeNumbers(9)
}
}
我使用的是 intelliJ,在我将 src/test/groovy 文件夹作为源测试根目录后,测试运行正常。但是当我这样做时
mvn 全新安装
测试失败
[ERROR] Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.5:testCompile (default) on project prime-number-calculator: Error occurred while calling a method on a Groovy class from classpath.: InvocationTargetException: startup failed:
[ERROR] C:\development\prime_number_calculator\src\test\groovy\com\twg\sample\model\PrimeNumberCalculatorSpec.groovy: 10: unable to resolve class PrimeNumberCalculator
[ERROR] @ line 10, column 24.
[ERROR] def primeCal = new PrimeNumberCalculator()
为什么 groovy 测试找不到同一个包中的 java class?
我的 groovy 插件是
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<useFile>false</useFile>
<includes>
<include>**/*Spec.groovy</include>
</includes>
</configuration>
</plugin>
这个问题是一个非常奇怪的 Surefire 怪癖。
这不有效:
<include>**/*Spec.groovy</include>
这些都有效:
<include>**/*Spec.java</include>
<include>**/*Spec.class</include>
<include>**/*Spec.*</include>
有趣,嗯(尤其是第一个变体)?我还没有检查是否有开放的 Surefire 票。您可能想要创建一个并在评论中返回这里报告。
替代解决方案: 我经常做的是将我的 Spock 测试命名为以 *Test
(Surefire)或 *IT
(Failsafe)结尾。这样我就不需要任何包含,它可以在混合 Java 和 Groovy 测试的项目中工作。
我是 spock 测试的新手,我遇到了一个我无法弄清楚的棘手问题。我不确定我做错了什么
我有一个简单的javaclass
./src/main/java/com/twg/sample/model/PrimeNumberCalculator.java
package com.twg.sample.model;
import org.springframework.stereotype.Service;
import java.util.stream.IntStream;
@Service
public class PrimeNumberCalculator {
public int[] getPrimeNumbers(int end) {
return IntStream.rangeClosed(1, end)
.filter(number -> !IntStream.rangeClosed(2, number / 2).anyMatch(i -> number % i == 0))
.toArray();
}
}
我有一个简单的 groovy spock 测试 ./src/test/groovy/com/twg/sample/model/PrimeNumberCalculatorSpec.groovy
package com.twg.sample.model
import spock.lang.Specification
class PrimeNumberCalculatorSpec extends Specification{
def "test prime numbers"(){
given:
def primeCal = new PrimeNumberCalculator()
expect:
[1, 2, 3, 5, 7] == primeCal.getPrimeNumbers(9)
}
}
我使用的是 intelliJ,在我将 src/test/groovy 文件夹作为源测试根目录后,测试运行正常。但是当我这样做时
mvn 全新安装 测试失败
[ERROR] Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.5:testCompile (default) on project prime-number-calculator: Error occurred while calling a method on a Groovy class from classpath.: InvocationTargetException: startup failed:
[ERROR] C:\development\prime_number_calculator\src\test\groovy\com\twg\sample\model\PrimeNumberCalculatorSpec.groovy: 10: unable to resolve class PrimeNumberCalculator
[ERROR] @ line 10, column 24.
[ERROR] def primeCal = new PrimeNumberCalculator()
为什么 groovy 测试找不到同一个包中的 java class? 我的 groovy 插件是
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<useFile>false</useFile>
<includes>
<include>**/*Spec.groovy</include>
</includes>
</configuration>
</plugin>
这个问题是一个非常奇怪的 Surefire 怪癖。
这不有效:
<include>**/*Spec.groovy</include>
这些都有效:
<include>**/*Spec.java</include>
<include>**/*Spec.class</include>
<include>**/*Spec.*</include>
有趣,嗯(尤其是第一个变体)?我还没有检查是否有开放的 Surefire 票。您可能想要创建一个并在评论中返回这里报告。
替代解决方案: 我经常做的是将我的 Spock 测试命名为以 *Test
(Surefire)或 *IT
(Failsafe)结尾。这样我就不需要任何包含,它可以在混合 Java 和 Groovy 测试的项目中工作。