Hilt测试用例无法运行 自定义testInstrumentationRunner不生效
问题根因
- 自定义TestRunner代码存在致命错误:
newApplication方法传入的第二个参数是HiltTestRunner本身的类名,而非合法的Application类,导致测试进程初始化Application失败,无测试用例执行。 - 测试Module注解使用错误:若该测试Module用于替换正式环境的Module,需使用
@TestInstallIn而非普通@InstallIn注解。 - 若正式环境代码中未提供对应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
相关产品推荐
相关产品推荐

