【问题标题】:Need example of Robolectric with Mockito to write the unit test case需要带有 Mockito 的 Robolectric 示例来编写单元测试用例
【发布时间】:2018-09-24 07:24:53
【问题描述】:

如何在 Robolectric 中使用 Mocking (Mockito)在Android Test包中编写单元测试,请帮助我

【问题讨论】:

  • 欢迎来到 StackOverflow!不幸的是,我认为您的问题不适合该网站;这个问题太宽泛了,无法在这里回答,而且寻找外部教程或示例被认为是题外话。在 StackOverflow here 上查看有关主题的更多信息。祝您测试顺利!

标签: android unit-testing automated-tests mockito robolectric


【解决方案1】:

据我所知,您不会将 Mockito 与 Robolectric 结合使用。

您使用 Robolectric 是为了不必在模拟器或物理设备上测试您的仪器测试,而是在 JVM 上进行测试。那是Robolectric。这样你也可以访问 android 框架,而且速度较慢。

另一方面,Mockito 是一个库,它允许你在 单元测试 中模拟你的依赖项。单元测试的目的是测试您希望测试的特定软件实体的行为,特别是其逻辑。由于它无法访问 android 框架(它不需要那个),所以速度相当快。

编辑:

实际上更复杂。您可以将 Robolectric 与 Mockito 一起使用(通过将 Mockito 规则作为 Runner 引入 - 然后您有 2 个 runner,一个 @RunWith(AndroidJunit4) - robolectric 一个,带有 MockitoRule)。而且您可以对需要使用 Robolectric 访问 android SDK 的东西进行单元测试,而无需实际启动活动……所以这些是我可以在 Android 上提出的测试配置:

  1. (/test) 简单 JUnit

  2. (/test) JUnit + Mockito - 设计模式中的经典单元测试

  3. (/test) AndroidJUnit (Robolectric) + Mockito 无需启动活动 - 需要 android sdk 实例和模拟的单元测试

  4. (/test) **AndroidJUnit (Robolectric) - 启动活动,您使用 espresso 测试 UI

    1. (/instrumentedTest) AndroidJUnit - 同样的,用 espresso 测试 ui

或者您也可以使用 sharedTest。两者只有一个文件夹。有了这个,您也许可以选择在设备和虚拟机上运行一个测试,我只是不确定如何。也许氮气会在未来推出这个选项。 https://blog.danlew.net/2015/11/02/sharing-code-between-unit-tests-and-instrumentation-tests-on-android/

如今,您可以为特定课程设置测试环境的方法很多。我希望 Nitrogen 项目能够简化这个决策并提供一个很好的文档。

编辑

其实我写这篇评论的时候错了。您可以在 robolectric 测试中模拟依赖项。您可以通过依赖注入(Koin,Dagger 2)并创建具有相同抽象的不同依赖图来做到这一点。 (比较复杂,有的博客里查一下……这里就不多说了)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 2018-11-15
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多