使用单个命令从多模块项目运行所有 UI/单元测试

Posted

技术标签:

【中文标题】使用单个命令从多模块项目运行所有 UI/单元测试【英文标题】:Run all UI/Unit tests from a multi-module project using a single command 【发布时间】:2020-05-27 23:06:36 【问题描述】:

我们有一个多模块 android 项目,其中一些模块包含 UI 测试,一些包含单元测试。我们希望使用单个 Gradle 命令从所有模块运行所有 UI 测试,并对单元测试执行相同的操作。

我们发现这样做的唯一方法是在实现所有其他子模块的主 app 模块中使用以下配置(基本上使 app 模块了解所有其他 androidTest 和 @ 987654324@项目中的文件夹):

app/build.gradle:

 sourceSets 
        androidTest.java.srcDirs += ["$project(':feature-login').projectDir/src/androidTest/java"]
        test.java.srcDirs += ["$project(':feature-login').projectDir/src/test/java"]
        test.java.srcDirs += ["$project(':core').projectDir/src/test/java"]
    

然后我们运行以下 Gradle 命令:

./gradlew app:connectedDemoDebugAndroidTest
./gradlew app:testDemoDebugUnitTest

问题:是否有更好/更简单的方法来实现这一目标?或者有没有办法从上述解决方案动态添加androidTesttest 文件夹(使用相对路径),而不必为每个模块编写srcDirs 行(我们有40多个模块) ?

【问题讨论】:

【参考方案1】:

只需在终端中运行:

./gradlew 测试

请see docs 了解更多选项

【讨论】:

【参考方案2】:

我每天都这样做(我通常有一个用于单元测试的源集和一个用于较慢集成测试的源集:./gradlew check。它运行所有测试任务。

来自gradle docs:

检查

取决于:测试

执行验证任务的聚合任务,例如运行测试。一些插件添加了自己的验证任务来检查。如果您希望它们执行完整构建,您还应该将任何自定义测试任务附加到此生命周期任务。此任务由 Base Plugin 添加。

【讨论】:

以上是关于使用单个命令从多模块项目运行所有 UI/单元测试的主要内容,如果未能解决你的问题,请参考以下文章

maven ::在多模块项目中仅运行单个测试

maven:如何通过命令行选项跳过某些项目中的测试?

在多模块 Maven 项目中构建所有模块后,如何运行集成测试?

使用 Roboelectric 3.8 运行单元测试时出现 NoClassDefFoundError

命令行运行Android Robotium自动化用例或单元测试用例

如何在针对特定 Gradle 构建风格的同时从命令行运行单个单元测试方法