【发布时间】:2018-02-03 23:03:39
【问题描述】:
我正在运行一个 androidTest 仪器测试,并且我有一个使用 Room 从 DAO 对象返回 LiveData 的方法。
我这样调用方法:
val animal = roomDatabase.animalsDao().getAnimal(1)
animal.observeForever(mMockObserver)
assertNotNull(animal.value)
我使用 Mockito 来模拟观察者:
@Mock
private lateinit var mMockObserver = Observer<Animal>
这应该返回一个 LiveData 实例,其中包含 id 为 1 的 Animal,但它为 null。我的理解是,为了让 LiveData 返回任何东西,必须有一个观察者。我是不是设置错了?
注意:如果我在 DAO 中更改 getAnimal() 的签名以直接返回 Animal,而不是 LiveData,那么它可以工作,所以我知道它与 LiveData 相关。
【问题讨论】:
-
AndroidTests(AndroidTest 文件夹中的测试)不是单元测试,而是插桩测试。此外,您错误地使用了 Mock 注释,您正在立即实例化 Observer ,这将(我不知道)a。使 Mock 注释无用或 b。使实例化无用。
-
我在问题中的错误措辞已更新。我最近正在学习如何使用 Mockito,所以我似乎误解了如何使用它。看起来我还有一些阅读要做:) 我也不相信 Mockito 是我在这里需要的。我之前翻遍了 Google 的示例,看看他们是如何使用 LiveData 进行测试的,但我的答案错过了文件……现在用我的发现更新……
标签: android kotlin android-room android-architecture-components android-livedata