如何使用gradlew从子项目运行一个测试?

4ioopgfo  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(132)

我在gradle中有一个多项目构建。这是一个Android项目,当我在Android Studio中手动执行时,有问题的测试确实会运行。该项目的结构如下:

.../my-app$ ./gradlew -q projects
[...]
Root project 'my-app'
+--- Project ':myapp'
\--- Project ':mymodel'
[...]

我想在:myapp中执行一个测试(类)。由于版本限制,我必须使用项目根目录中的gradlew
执行单个测试的正确命令似乎是./gradlew test --tests my.project.MyTest,但我不知道如何对子项目执行该命令。
如果我运行./gradlew test --tests my.project.MyTest,我得到

FAILURE: Build failed with an exception.

* What went wrong:
Problem configuring task :myapp:test from command line.
> Unknown command-line option '--tests'.

并建议运行gradle help --task :myapp:test,得到

> Task :help
Detailed task information for :myapp:test

Path
     :myapp:test

Type
     Task (org.gradle.api.Task)

Description
     Run unit tests for all variants.

Group
     verification

而且根本没有命令行选项,所以我想我可以把它留在外面。
./gradlew test my.project.MyTest给出
Task 'my.project.MyTest' not found in root project 'my-app'.
对于./gradlew :myapp:test my.project.MyTest也是如此。
This answer到一个较老的问题建议拼写出变体名称,对于我来说是./gradlew :myapp:testReleaseUnitTest --tests my.project.MyTest,并产生

> Task :myapp:testReleaseUnitTest FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':myapp:testReleaseUnitTest'.
> No tests found for given includes: [my.project.MyTest](--tests filter)

./gradlew --version7.1,我刚刚升级到./gradlew wrapper --gradle-version 7.1gradle wrapper
在这一点上我已经没有办法了。我做错了什么?我怎么能在命令行中运行一个单一的测试?

x6h2sr28

x6h2sr281#

我正在寻找类似的问题,遇到了你的问题,这为我提供了一些提示。经过一些试验,我发现从根运行子项目的特定任务的语法似乎是:

./gradlew sub_project:task_name

因此,对于类似于以下的项目结构:
根项目:app
+---子项目:subapp1
+---子项目:subapp2
从root运行subapp1子项目中的MyTest test的命令是:

./gradlew subapp1:test --tests MyTest

编辑:混淆的来源是:
运行./gradlew -q projects时,Gradle报告子项目时会使用前导:字符。请勿在命令中使用该字符。

相关问题