gpt4 book ai didi

java - groovy spock 测试无法在同一包中找到 java 类

转载 作者:行者123 更新时间:2023-12-02 11:45:39 35 4
gpt4 key购买 nike

我对 Spock 测试还很陌生,我遇到了一个我无法解决的棘手问题。我不确定我做错了什么

我有一个简单的java类

./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类?我的 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 测试的项目中工作。

关于java - groovy spock 测试无法在同一包中找到 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219564/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com