在我的测试模块中提供 HiltTestApplication 作为依赖项失败
Posted
技术标签:
【中文标题】在我的测试模块中提供 HiltTestApplication 作为依赖项失败【英文标题】:Getting failed in providing HiltTestApplication as a dependency in my test module 【发布时间】:2021-08-14 17:07:42 【问题描述】:我已遵循this 指南并尝试使用 HILT 运行检测测试。但在我的测试模块中提供HiltTestApplication 作为依赖项失败了。 下面是我的模块类-
@ExperimentalCoroutinesApi
@FlowPreview
@Module
@TestInstallIn(components = [SingletonComponent::class],
replaces = [ProductionModule::class])
object TestModule
@JvmStatic
@Singleton
@Provides
fun provideRecipeDb(app: HiltTestApplication): RecipeDatabase
return Room
.inMemoryDatabaseBuilder(app, RecipeDatabase::class.java)
.fallbackToDestructiveMigration()
.build()
遇到以下错误-
C:\Users\bhuvn\androidStudioProjects\Dairy\app\build\generated\source\kapt\debugAndroidTest\com\bhuvnesh\diary\framework\dataSource\cache\RecipeDaoServiceTests_HiltComponents.java:128: 错误:[Dagger/MissingBinding] dagger.hilt.android.testing.HiltTestApplication 无法提供 没有@Inject 构造函数或@Provides 注释方法。 公共抽象静态类 SingletonC 实现 RecipeDaoServiceTests_GeneratedInjector, ^ dagger.hilt.android.testing.HiltTestApplication 在注入 com.bhuvnesh.diary.di.TestModule.provideRecipeDataFactory(应用程序, �) com.bhuvnesh.diary.framework.dataSource.data.RecipesDataFactory 注入于 com.bhuvnesh.diary.framework.dataSource.cache.RecipeDaoServiceTests.recipeDataFactory com.bhuvnesh.diary.framework.dataSource.cache.RecipeDaoServiceTests 是 注射于 com.bhuvnesh.diary.framework.dataSource.cache.RecipeDaoServiceTests_GeneratedInjector.injectTest(com.bhuvnesh.diary.framework.dataSource.cache.RecipeDaoServiceTests) 它也被要求在: com.bhuvnesh.diary.di.TestModule.provideRecipeDb(app)
我还尝试通过在同一模块中手动提供依赖项-
@JvmStatic
@Singleton
@Provides
fun provideHiltTestApplication():HiltTestApplication
return HiltTestApplication()
但它提供了一个导致 nullpointerexception 的空对象。
【问题讨论】:
【参考方案1】:要提供应用程序上下文,您需要将app: HiltTestApplication
替换为@ApplicationContext app: Context
,因为HiltTestApplication
是可用于使用 Hilt 进行 Android 仪器或 Robolectric 测试的基础应用程序,但必须在其注释中指定(就像这个@Config(application = HiltTestApplication::class)
)。因此,要在方法中提供上下文,您需要添加预定义的限定符来提供它。看看这些
【讨论】:
以上是关于在我的测试模块中提供 HiltTestApplication 作为依赖项失败的主要内容,如果未能解决你的问题,请参考以下文章