Gradle 仅用于测试依赖项的模块输出配置

Gradle module output configuration for test dependencies only

我有一个 Gradle 项目包含两个模块 apptest,其中 test 包含用于测试的实用程序只要。现在我想设置这个模块,所以它不会在 appmain 配置中包含任何输出;甚至不是不小心。

implementation project(':test') # should fail or not contain any inputs

testImplementation project(':test') # should include all inputs
androidTestImplementation project(':test') # should include all inputs

如何配置 test 以实现这样的行为?

我假设它类似于 Android 插件处理构建类型和风格的配置的方式,但我也不确定如何解决这个问题。

我认为这些是用 Gradle consumer attributes 处理的。也许有一个过滤器或一个属性可以应用于它以使其仅可用于测试。

您可以为此使用注释: https://developer.android.com/studio/write/annotations#visible

另一种方法是将测试代码排除到名为 sub_test 的新模块,并在 test 中使用该 sub_test 模块的 testImplementationandroidTestImplementation模块

发现:Use separate test modules for instrumented tests,它告诉如何做:

... apply the com.android.test plugin instead of com.android.library.

java-test-fixtures 插件几乎和我希望的一样,只是有点冗长。

implementation project(':test') # should fail or not contain any inputs

testImplementation testFixtures(project(':test'))
androidTestImplementation testFixtures(project(':test'))

目前还有一些其他缺点

正如 Tom Tresansky 所问和回答的那样,Android Studio 不能很好地处理 testFixtures 源集。

此外,它还不适用于 KotlinAndroid。但是作为 Michael Evans pointed out, there's tasks already open for Android and on YouTrack.

但是用 Kotlin JVM 项目创建测试装置并用 Android 项目使用它们对我来说工作正常.