Gradle 仅用于测试依赖项的模块输出配置
Gradle module output configuration for test dependencies only
我有一个 Gradle 项目包含两个模块 app
和 test
,其中 test
包含用于测试的实用程序只要。现在我想设置这个模块,所以它不会在 app
的 main 配置中包含任何输出;甚至不是不小心。
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
模块的 testImplementation
或 androidTestImplementation
模块
发现: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
源集。
此外,它还不适用于 Kotlin 或 Android。但是作为 Michael Evans pointed out, there's tasks already open for Android and on YouTrack.
但是用 Kotlin JVM 项目创建测试装置并用 Android 项目使用它们对我来说工作正常.
我有一个 Gradle 项目包含两个模块 app
和 test
,其中 test
包含用于测试的实用程序只要。现在我想设置这个模块,所以它不会在 app
的 main 配置中包含任何输出;甚至不是不小心。
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
模块的 testImplementation
或 androidTestImplementation
模块
发现:Use separate test modules for instrumented tests,它告诉如何做:
... apply the
com.android.test
plugin instead ofcom.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 testFixtures
源集。
此外,它还不适用于 Kotlin 或 Android。但是作为 Michael Evans pointed out, there's tasks already open for Android and on YouTrack.
但是用 Kotlin JVM 项目创建测试装置并用 Android 项目使用它们对我来说工作正常.