使用 gradle 进行单元测试,当测试基础结构位于 src/test/java 文件夹中的某个其他项目中时

UnitTest with gradle, when test Infrastructure is in some other project in src/test/java folder

有两个 java 项目 A 和 B,构建引擎是 gradle。

那是一个多项目,A 依赖 B

答:build.gradle

...
dependencies {
    compile project (':B')
}
...

B 的核心代码在src/main/java,测试代码在src/test/javasrc/test/java 中还有一些测试基础设施 类,例如加载测试数据。

gradle :B:test 工作正常

A-Project 中的测试使用 B-Project 中的测试基础设施 类,这对 eclipse 没问题,但对 gradle 不行。因为构建的对 B-Project 的 jar 文件依赖性仅包括来自 src/main/java 的 类。

我们得到错误:

com.aaa.SomeClassFromAAAA.java:42: error: cannot find symbol
import com.bbb.InfrastructureTestClassFromBBB;

解决方法是什么?

Gradle 论坛 here 对此进行了讨论。这个想法是用你的测试 类 构建 JAR 并让它对你的 A 项目可见。还有注释为什么这对 IDE 来说很困难。

另一种方法是将测试基础设施 类 移至另一个项目的主要来源。这假设他们不依赖于 A 的主要来源。您可以在 Gradle 的代码库中看到类似的内容(https://github.com/gradle/gradle/tree/master/subprojects 中的 int*-test* 文件夹)。