groovy spock test无法在同一个包中找到java类

时间:2018-01-12 04:28:31

标签: java maven groovy spock

我对spock测试很新,我遇到了一个我无法弄清楚的毛茸茸的问题..我不确定我做错了什么

我有一个简单的java类

./ SRC /主/ JAVA / COM / TWG /样品/模型/ 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();
    }
}

我有一个简单的常规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 clean install 测试失败

[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>

1 个答案:

答案 0 :(得分:1)

这个问题是一个非常奇怪的Surefire怪癖。

工作:

<include>**/*Spec.groovy</include>

相反,其中任何一个都有效:

<include>**/*Spec.java</include>
<include>**/*Spec.class</include>
<include>**/*Spec.*</include>

好笑,呃(特别是第一个变种)?我还没有检查是否有开放的Surefire票。您可能需要创建一个并在评论中报告回来。

替代解决方案:我总是将我的Spock测试命名为以*Test(Surefire)或*IT(Failsafe)结束。这样我就不需要任何包含它,它将适用于混合Java和Groovy测试的项目。