如何在GitHub Actions上禁用部分JUnit 5 Android插桩测试?
方案1:通过Gradle配置直接过滤测试类(无需修改测试代码)
Gradle运行插桩测试的逻辑在CI宿主机侧执行,你可以直接在构建脚本中读取GitHub Actions自带的CI环境变量,动态配置插桩运行器排除指定测试类,完全不需要到设备运行环节才处理。
以下是模块级build.gradle.kts(Kotlin DSL)的配置示例:
android { defaultConfig { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" // 检测到CI环境时,排除指定插桩测试类 if (System.getenv("CI") == "true") { testInstrumentationRunnerArguments["notClass"] = "com.yourpackage.YourTargetTestClass" } } }
如果使用Groovy DSL,写法如下:
android { defaultConfig { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" if (System.getenv("CI") == "true") { testInstrumentationRunnerArgument "notClass", "com.yourpackage.YourTargetTestClass" } } }
如果需要排除多个测试类,多个类的全路径用冒号分隔即可。
方案2:自定义参数在测试侧动态跳过
如果需要更灵活的控制逻辑,可以通过Gradle给插桩运行器传递自定义标记,在测试代码中读取标记决定是否跳过测试。
- 首先修改Gradle配置,CI环境下传递自定义参数:
android { defaultConfig { if (System.getenv("CI") == "true") { testInstrumentationRunnerArguments["isCiEnv"] = "true" } } }
- 在测试类中读取参数,使用JUnit的
Assumptions跳过测试:
如果要跳过整个类的所有用例,在@BeforeAll方法中判断即可:
import androidx.test.platform.app.InstrumentationRegistry; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Assumptions; public class YourTargetTestClass { @BeforeAll static void beforeAll() { String isCiEnv = InstrumentationRegistry.getArguments().getString("isCiEnv"); Assumptions.assumeFalse(Boolean.parseBoolean(isCiEnv), "CI环境下跳过该测试类"); } // 测试用例... }
内容的提问来源于stack exchange,提问作者Mahozad
相关产品推荐
相关产品推荐

