首页 > 解决方案 > 多模块项目中的 Gradle 测试库

问题描述

我想创建一个库,我的项目中的其他模块可以依赖它,但仅用于测试。我已经广泛阅读了 Gradle 文档,但找不到如何去做。这是我的项目结构:

gradle-example:
  app:
    src/main/kotlin ...
    src/test/kotlin <- this is supposed to use 'com.example.SomeTestUtil'
  testlib:
    src/test/kotlin/com.example.SomeTestUtil

settings.gradle.kts:

rootProject.name = "gradle-example"
include("app")
include("testlib")

在我尝试添加的应用程序模块中

dependencies {
  testImplementation(project(:testlib"))
}

SomeTestUtil但是我在尝试导入app模块测试类时遇到编译错误。

在允许在测试代码中使用测试源的同一项目中声明对模块的依赖关系的正确方法是什么?

澄清一下,我们想创建一个只能被其他模块使用的库,src/test而不是src/main.

标签: gradle

解决方案


显然这可以通过使用https://docs.gradle.org/current/userguide/java_testing.html#sec:java_test_fixtures来完成

  • 他们可以看到主要的源集类

  • 测试源可以看到测试夹具类

因此,问题中示例的更改是:

  1. 更改src/testsrc/testFixtures
  2. 将依赖声明为testImplementation(testFixtures(project(":testlib")))
  3. 为模块添加java-test-fixtures插件build.gradle.ktstestlib

推荐阅读