【问题标题】:Android UI Testing With MVVM使用 MVVM 进行 Android UI 测试
【发布时间】: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


【解决方案1】:

通过更多的研究,我发现 Espresso 已经有一个解决这个问题的方法,称为空闲资源。

您可以从下面的列表中选择合适的空闲资源实现,将其集成到您的应用中。

您可以通过将其添加到 Gradle 文件中来开始在您的应用中使用它,如下所示:

def espresso_version = '3.2.0' 

androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version"
implementation "androidx.test.espresso:espresso-idling-resource:$espresso_version"

请注意,更新后的 Espresso 版本可以在 Google's Maven Repository

找到

Sample from Google

More details on idling resources

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多