gpt4 book ai didi

android - 与 TestInstallIn 重复绑定(bind)以进行检测测试

转载 作者:行者123 更新时间:2023-12-04 17:17:47 25 4
gpt4 key购买 nike

我正在使用 Hilt 注入(inject)一些依赖项,如下所示:

@Module
@InstallIn(SingletonComponent::class)
object SomethingModule {

@Provides
fun provideSomething(@ApplicationContext context: Context): Something {
//return RealSomething
}
}
我想在我的测试中替换这个绑定(bind)并遵循这个 guide我将此假模块添加到与我的仪器测试相同的文件夹中:
@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [SomethingModule::class]
)
object FakeSomethingModuleModule {

@Provides
fun provideSomethingModule(): Something {
return FakeSomething()
}
}
当我尝试运行我的检测测试时,构建失败并出现重复绑定(bind)错误:
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()
}

最佳答案

为了最终找到解决方案,我尝试了很多不同的方法:

  • 确保伪造的实现有 @Inject constructor()
  • 测试中@Module使用 @Binds和一个抽象类而不是 @Provides
  • 您不需要组合所有模块的组件,此代码不是必需的:
  • @Module(
    includes = [ <modules> ]
  • 在这个示例中并不明显,但在我的实际代码中,我尝试测试的模块被包含为使用 @Module(includes = SomethingBinding) 与另一个类的绑定(bind)。 .我为我想在我的仪器测试中模拟的对象创建了一个模块
  • 关于android - 与 TestInstallIn 重复绑定(bind)以进行检测测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68138932/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com