gpt4 book ai didi

android - Dagger Hilt 没有在测试中注入(inject)

转载 作者:行者123 更新时间:2023-12-02 11:19:55 26 4
gpt4 key购买 nike

我正在尝试使用带有 Robolectric 的 Dagger Hilt 进行测试:

@RunWith(RobolectricTestRunner::class)
@UninstallModules(LevelModule::class, AppModule::class)
@Config(sdk = [16, 28], application = HiltTestApplication::class)
@LooperMode(LooperMode.Mode.PAUSED)
@HiltAndroidTest
class LevelFragmentTest {

@get:Rule
var rule = HiltAndroidRule(this)

@Test
fun testShowGameOverWhenTapAMine() {
launchActivity<GameActivity>().onActivity { activity ->
ShadowLooper.runUiThreadTasks()
...
}
}
GameActivity.onCreate 上的测试失败,因为带有 @Inject 的 GameActivity 的所有字段都为空。
游戏 Activity 是:
@AndroidEntryPoint
class GameActivity : AppCompatActivity()
这些模块是:
@Module
@InstallIn(ActivityComponent::class)
open class LevelModule { ... }
@Module
@InstallIn(ActivityComponent::class)
class TestLevelModule {
@Module
@InstallIn(ApplicationComponent::class)
class AppModule() { ... }
@Module
@InstallIn(ApplicationComponent::class)
class TestAppModule() { ... }
它在我运行应用程序时有效,但是当我运行测试时,没有注入(inject) GameActivity@Inject 的所有字段都为空。
有谁知道它出了什么问题?

如果有用,整个代码和测试都在这里:
  • https://github.com/lucasnlm/antimine-android/pull/95
  • https://github.com/lucasnlm/antimine-android/pull/95/commits/fcc1b3782b8d456898529dd3ba2410ac5f2da6d5

  • 编辑
    我不知道为什么,但是这个 PR 上的测试通过了:
  • https://github.com/lucasnlm/antimine-android/pull/100
  • 最佳答案

    根据testing guide ,

    you must replace the binding. Create a new module within the test class that defines the test binding:


    @UninstallModules(AnalyticsModule::class)
    @HiltAndroidTest
    class SettingsActivityTest {

    @Module
    @InstallIn(ApplicationComponent::class)
    abstract class TestModule {

    @Singleton
    @Binds
    abstract fun bindAnalyticsService(
    analyticsServiceImpl: AnalyticsServiceImpl
    ): AnalyticsService
    }

    ...
    }

    关于android - Dagger Hilt 没有在测试中注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62393072/

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