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

Hilt测试用例无法运行 自定义testInstrumentationRunner不生效

问题根因

  1. 自定义TestRunner代码存在致命错误:newApplication方法传入的第二个参数是HiltTestRunner本身的类名,而非合法的Application类,导致测试进程初始化Application失败,无测试用例执行。
  2. 测试Module注解使用错误:若该测试Module用于替换正式环境的Module,需使用@TestInstallIn而非普通@InstallIn注解。
  3. 若正式环境代码中未提供对应String类型的依赖绑定,也会导致依赖注入失败,测试无法正常执行。

修复步骤

1. 修正自定义TestRunner代码

将newApplication方法的第二个参数替换为Hilt官方提供的测试Application类HiltTestApplication的全类名,修正后代码如下:

package com.priyanshumaurya8868.hilttesting

import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner
import dagger.hilt.android.testing.HiltTestApplication

class HiltTestRunner: AndroidJUnitRunner() {
    override fun newApplication(
        cl: ClassLoader?,
        className: String?,
        context: Context?
    ): Application {
        return super.newApplication(cl, HiltTestApplication::class.java.name, context)
    }
}

2. 修正测试Module注解(按需)

如果该测试Module用于替换正式环境中定义的同名Module,将@InstallIn替换为@TestInstallIn,指定要替换的正式Module类:

package com.priyanshumaurya8868.hilttesting

import dagger.Module
import dagger.Provides
import dagger.hilt.components.SingletonComponent
import dagger.hilt.testing.TestInstallIn

// 括号内replaces的值替换为你正式环境对应提供String依赖的Module类名
@Module
@TestInstallIn(
    components = [SingletonComponent::class],
    replaces = [AppModule::class]
)
object TestAppModule  {

    @Provides
    fun provideRandomString()="random testing 1"
}

3. 清理缓存重新运行

执行如下操作后再运行测试:

  • 点击Android Studio菜单栏的Build -> Clean Project
  • 再点击Build -> Rebuild Project
  • 卸载测试设备上已安装的本应用及测试应用,重新运行测试用例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:45:01