【发布时间】:2019-10-13 00:03:23
【问题描述】:
我在我的应用程序中使用 MVVM 架构和 Dagger 2。我有一个从服务器获取数据的存储库,当检索到数据时,ViewModel 会通知 LiveData 观察者,它会从我的 Activity 中调用 updateUI() 方法。
所以,当我测试 espresso 可以看到哪些视图时,我想等到 updateUI() 被调用。因为我使用的是 Dagger 2,所以我不能轻松地模拟 ViewModel,但除此之外,因为它是一个集成测试,我一开始就不想这样做。
Thread.sleep() 会是一个糟糕而幼稚的解决方案,因为等待时间太短会导致测试失败,太多会导致宝贵时间的损失,这也取决于测试和网络环境!
那么我们在这里做什么,这个问题的最佳解决方案是什么?
【问题讨论】:
-
选项包括:使用github.com/square/okhttp/tree/master/mockwebserver 之类的工具来模拟网络响应,或者注入您的网络类,以便您可以在 UI 测试中通过应用程序将它们替换为您自己的自定义模拟。
-
@stkent 我知道并且已经在我的单元测试中使用了 mockwebserver,但这是一个集成测试。另外,因为我使用 dagger 2 来注入活动,所以我不能轻易模拟它。
标签: java android unit-testing testing mvvm