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

Android简单插桩测试运行失败:Dagger注入无法识别自定义MyApplication

你遇到的报错是因为Android插桩测试默认会使用系统自带的android.app.Application类启动测试环境,不会自动加载你项目中实现了HasAndroidInjector接口的MyApplication类,导致Dagger注入时找不到对应实现,以下是两种可行的配置方案:

配置方案

方案1:全局指定测试使用的自定义Application(推荐,所有测试统一生效)

  • 在androidTest代码目录下创建自定义测试运行器类:
import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner
// 替换为你自己的MyApplication全类名
import com.your.packagename.MyApplication

class CustomTestRunner : AndroidJUnitRunner() {
    override fun newApplication(
        cl: ClassLoader?,
        className: String?,
        context: Context?
    ): Application {
        return super.newApplication(cl, MyApplication::class.java.name, context)
    }
}
  • 修改模块级build.gradle(app目录下)的配置,指定测试运行器:
android {
    defaultConfig {
        // 原有其他配置保留
        // 替换为你刚才创建的CustomTestRunner的全类名
        testInstrumentationRunner "com.your.packagename.CustomTestRunner"
    }
}
  • 同步Gradle配置后重新运行测试即可。

方案2:针对单个测试单独配置

如果不想全局修改测试配置,仅需要给单个测试用例使用自定义Application,可以通过ActivityScenario的启动参数调整:

@RunWith(AndroidJUnit4::class)
class MainActivityTest{
    @Test
    fun test_openPage() {
        val context = ApplicationProvider.getApplicationContext<Context>()
        val intent = Intent(context, MainActivity::class.java).apply {
            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        }
        val activityScenario = ActivityScenario.launch<MainActivity>(intent)
        // 后续测试逻辑
    }
}

注意:确保你项目主AndroidManifest.xml的<application>标签已经配置了android:name=".MyApplication",测试环境会默认继承主Manifest的配置,除非你单独创建了测试用的Manifest覆盖了该属性。

内容的提问来源于stack exchange,提问作者Egemen Hamutçu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:24:01