You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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给插桩运行器传递自定义标记,在测试代码中读取标记决定是否跳过测试。

  1. 首先修改Gradle配置,CI环境下传递自定义参数:
android {
    defaultConfig {
        if (System.getenv("CI") == "true") {
            testInstrumentationRunnerArguments["isCiEnv"] = "true"
        }
    }
}
  1. 在测试类中读取参数,使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:06:02