【发布时间】:2021-06-26 03:20:26
【问题描述】:
我正在使用 Hilt 注入一些依赖项,如下所示:
@Module
@InstallIn(SingletonComponent::class)
object SomethingModule {
@Provides
fun provideSomething(@ApplicationContext context: Context): Something {
//return RealSomething
}
}
我想在我的测试中替换这个绑定,并按照这个 guide 我将此假模块添加到与我的插桩测试相同的文件夹中:
@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [SomethingModule::class]
)
object FakeSomethingModuleModule {
@Provides
fun provideSomethingModule(): Something {
return FakeSomething()
}
}
当我尝试运行我的检测测试时,构建失败并出现重复绑定错误:
error: [Dagger/DuplicateBindings] com.example.Something is bound multiple times:
public abstract static class SingletonC implements HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint,
注释掉 Fake Module 可以解决问题。有人看到我在这里缺少什么吗?
编辑:刚刚尝试使用 @UninstallModules 并遇到相同的构建错误:
@UninstallModules(SomethingModule::class)
@HiltAndroidTest
@RunWith(AndroidJUnit4::class)
class MyInstrumentedTest {
@Module
@InstallIn(SingletonComponent::class)
object FakeSomethingModule {
@Provides
fun provideSomthing(): Something = FakeSomething()
}
【问题讨论】:
-
Something is bound multiple times这个问题是因为你提供了来自两个不同模块的Something依赖。您可以从测试模块中删除 SomethingModule。 -
@0xAliHn 我正在尝试替换测试中的一个模块,第二个模块是故意的。
TestInstallIn是 Hilt 的一项功能,可让您执行此操作。
标签: android dagger dagger-hilt