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

重建后Instrumentation Tests失效:未找到测试用例求助

解决Android Instrumentation Tests重建后测试类丢失的问题

看起来你遇到了一个挺棘手的增量构建问题——第一次运行测试一切正常,但修改测试文件后,测试类居然从APK里消失了,导致"No tests found"错误。结合你的build.gradle配置和问题描述,我整理了几个最可能的原因和对应的解决方案:

1. 增量构建的缓存残留(最可能的原因)

虽然你加了--no-build-cache参数,但Android Gradle Plugin(AGP)的增量构建有时候还是会出现识别错误,尤其是修改测试类后,AGP可能没有正确标记测试代码需要重新编译,反而错误地将旧的测试类从构建产物中排除。

解决方案:
执行彻底的清理+构建命令,强制重新编译所有代码(包括测试代码):

./gradlew clean connectedDebugAndroidTest

如果这个命令能正常运行测试,那基本可以确定是增量构建的缓存问题。后续如果再遇到类似情况,先尝试clean再构建。

2. 测试类的结构/注解被意外破坏

修改测试文件时,可能不小心改动了测试类的关键结构,导致Gradle不再将其识别为有效的测试类,从而不打包进APK。需要检查以下几点:

  • 测试类是否有@RunWith(AndroidJUnit4.class)注解(如果是JUnit4测试)
  • 每个测试方法是否都标注了org.junit.Test注解(注意不要导入JUnit 3的junit.framework.Test)
  • 测试方法是否是public、无返回值、无参数的
  • 测试类本身是否是public的非抽象类

举个正确的测试类结构示例:

import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class DatabaseTest {

    @Test
    public void testDatabaseInsert() {
        // 测试逻辑
    }
}

3. 测试源集配置的潜在问题

你的build.gradle中给androidTest.assets添加了schema目录,这个配置本身没问题,但可以确认测试源集的Java路径是否正确(默认是src/androidTest/java)。可以显式指定测试源集的Java目录,避免AGP错误识别:

android {
    // ...其他配置
    sourceSets {
        androidTest {
            java.srcDirs = ['src/androidTest/java']
            assets.srcDirs += files("$projectDir/schemas".toString())
        }
    }
}

4. Lint或构建优化的干扰

虽然你设置了lintOptions.abortOnError false,但某些Lint警告可能还是会导致AGP跳过测试类的打包。另外,检查debug构建类型是否意外开启了代码混淆:

buildTypes {
    debug {
        minifyEnabled false // 显式关闭,默认也是false,但确保没有被覆盖
    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

5. AGP与Gradle版本兼容性问题

你使用的compileSdkVersion是27,对应的AGP版本应该在3.0.x到3.1.x之间,如果你的Gradle版本和AGP版本不匹配,也可能导致增量构建异常。可以检查项目根目录的build.gradle,确保两者版本兼容(比如AGP 3.1.4对应Gradle 4.4到5.6.4),必要时升级到对应版本的稳定版。

额外排查步骤

如果以上方案都没解决,建议:

  1. 查看构建日志(用-i参数),搜索DatabaseTest关键词,看编译阶段是否有报错,或者打包阶段是否有“skipping class”类的提示
  2. 尝试用Android Studio直接运行测试类,看是否能识别到测试——如果AS能运行,说明是命令行Gradle的配置问题;如果AS也找不到,那就是测试类本身的结构问题

内容的提问来源于stack exchange,提问作者Erik Johansson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:48:27