Android 使用Dagger2进行仪器化测试-如何引用假存储库?

Android 使用Dagger2进行仪器化测试-如何引用假存储库?,android,dagger-2,android-mvvm,Android,Dagger 2,Android Mvvm,我的目标是用浓缩咖啡测试一个应用程序 第一个屏幕活动取决于从存储库接收的设置。存储库检查用户是否在共享首选项中保存了位置首选项。如果他有,就转到主要活动。这就是我要测试的逻辑部分 我想用假存储库(代表共享首选项的HashMap)来实现一致性。如果存储库为空(基本状态),测试将运行并通过。但是,我想测试如果保存了位置,应用程序是否会向前移动 有关测试: @Test fun onLaunch_withLocationSaved_checkMainActivityIsShown() { fak

我的目标是用浓缩咖啡测试一个应用程序

第一个屏幕活动取决于从存储库接收的设置。存储库检查用户是否在共享首选项中保存了位置首选项。如果他有,就转到主要活动。这就是我要测试的逻辑部分

我想用假存储库(代表共享首选项的HashMap)来实现一致性。如果存储库为空(基本状态),测试将运行并通过。但是,我想测试如果保存了位置,应用程序是否会向前移动

有关测试:

@Test
fun onLaunch_withLocationSaved_checkMainActivityIsShown() {
    fakeRepository.saveLocation("40,80")

    ActivityScenario.launch(FirstScreenActivity::class.java)
    onView(withText(R.string.welcome_message)).check(matches(not(isDisplayed())))
}
如何获取fakeRepository的引用以保存ViewModel将从中读取的位置

如果它是这样创建的(这会破坏注入点):

@Before
fun init() {
    fakeRepository = FakeSimpleRepository()
    fakeRepository.saveLocation("")
    viewModel = FirstScreenViewModel(fakeRepository)
}
viewmodel被注入一个不同的fakeRepository对象(我将地址与调试器进行了比较)

我遵循谷歌的代码实验室和官方文档,了解如何在我的应用程序中设置Dagger。他们的示例没有显示如何引用存储库来进行更改。

博客介绍了您想要实现的目标


其思想是,您必须重写dagger模块以注入模拟对象。然后创建一个自定义运行器类来覆盖应用程序类

我已经运行了自定义运行程序和测试,对象被注入。但是,在viewmodel构造函数中注入了不同的对象,在测试类中注入了不同的对象,即使伪存储库应该是单例。这就是我面临的问题