我的目标是用Espresso测试一个应用程序。
第一个屏幕的活动取决于从存储库接收的设置。存储库检查用户是否在共享首选项中保存了位置首选项。如果他有,它将转移到主要活动。这就是我要测试的逻辑部分。
我想用伪存储库(代表共享偏好的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)
}
视图模型被注入了不同的fakeRepository对象(我将地址与调试器进行了比较)。
我遵循了Google的codelabs和官方文档,如何使用我的应用程序设置Dagger。他们的例子并没有展示如何引用存储库来进行更改。
发布于 2020-03-19 19:29:28
This博客介绍了您想要实现的目标
这个想法是你必须重写你的dagger模块来注入mock对象。然后创建一个自定义运行器类来覆盖应用程序类。
https://stackoverflow.com/questions/60749890
复制相似问题