多项目测试依赖与gradle

新手上路,请多包涵

我有一个多项目配置,我想使用 gradle。

我的项目是这样的:

  • 项目A

    • -> src/main/java
    • -> src/test/java
  • 项目B

    • -> src/main/java (取决于 src/main/java 项目A
    • -> src/test/java (取决于 src/test/java 项目A

我的 项目 B build.gradle 文件是这样的:

 apply plugin: 'java'
dependencies {
  compile project(':ProjectA')
}

任务 compileJava 工作得很好但是 compileTestJava 没有编译 项目 A 的测试文件。

原文由 mathd 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 566
2 个回答

已弃用 - 对于 Gradle 5.6 及更高版本,请使用 此答案

项目 B 中,您只需要添加一个 testCompile 依赖项:

 dependencies {
  ...
  testCompile project(':A').sourceSets.test.output
}

使用 Gradle 1.7 进行测试。

原文由 Fesler 发布,翻译遵循 CC BY-SA 4.0 许可协议

这现在作为 Gradle 中的一流功能得到支持。 Modules with java or java-library plugins can also include a java-test-fixtures plugin which exposes helper classes and resources to be consumed with testFixtures helper.这种方法对工件和分类器的好处是:

  • 适当的依赖管理(实现/ api)
  • 与测试代码很好地分离(单独的源集)
  • 无需过滤掉测试类以仅公开实用程序
  • 由 Gradle 维护

例子

:modul:one

模块/一个/build.gradle

 plugins {
  id "java-library" // or "java"
  id "java-test-fixtures"
}

模块/一个/src/testFixtures/java/com/example/Helper.java

 package com.example;
public class Helper {}

:modul:other

模块/其他/build.gradle

 plugins {
  id "java" // or "java-library"
}
dependencies {
  testImplementation(testFixtures(project(":modul:one")))
}

模块/其他/src/test/java/com/example/other/SomeTest.java

 package com.example.other;
import com.example.Helper;
public class SomeTest {
  @Test void f() {
    new Helper(); // used from :modul:one's testFixtures
  }
}

延伸阅读

有关详细信息,请参阅文档:

https://docs.gradle.org/current/userguide/java_testing.html#sec:java_test_fixtures

它是在 5.6 中添加的:

https://docs.gradle.org/5.6/release-notes.html#test-fixtures-for-java-projects

原文由 TWiStErRob 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题