1

我已遵循指南并尝试使用 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] 匕首。如果没有 @Inject 构造函数或 @Provides-annotated 方法,则无法提供 hilt.android.testing.HiltTestApplication。
公共抽象静态类 SingletonC 实现 RecipeDaoServiceTests_GeneratedInjector,^ dagger.hilt.android.testing.HiltTestApplication 在 com.bhuvnesh.diary.di.TestModule.provideRecipeDataFactory(application, �) 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 的 null 对象。

4

1 回答 1

0

要提供应用程序上下文,您需要替换app: HiltTestApplication为,@ApplicationContext app: Context因为HiltTestApplication它是可用于使用 Hilt 进行 Android 仪器或 Robolectric 测试的基础应用程序,但必须在其注释中指定(像这样@Config(application = HiltTestApplication::class))。因此,要在方法中提供上下文,您需要添加预定义的限定符来提供它。看看这些

于 2021-09-10T12:25:56.083 回答