【问题标题】: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 上提出的测试配置:
(/test) 简单 JUnit
(/test) JUnit + Mockito - 设计模式中的经典单元测试
(/test) AndroidJUnit (Robolectric) + Mockito 无需启动活动 - 需要 android sdk 实例和模拟的单元测试
-
(/test) **AndroidJUnit (Robolectric) - 启动活动,您使用 espresso 测试 UI
- (/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)并创建具有相同抽象的不同依赖图来做到这一点。 (比较复杂,有的博客里查一下……这里就不多说了)