首页 > 解决方案 > Need example of Robolectric with Mockito to write the unit test case

问题描述

How to use with Mocking (Mockito) with Robolectric can any one suggest me and i want to write the unit test cases for an API call also, i try with Robolectric but it only runs the label and actions but for API calls how to write the unit test in Android Test package,Please help me out

标签: androidunit-testingautomated-testsmockitorobolectric

解决方案


据我所知,您不会将 Mockito 与 Robolectric 结合起来在 Android 上进行测试。

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

另一方面,Mockito 是一个库,它允许您 :mock:单元测试中的依赖项。单元测试的目的是测试您希望测试的特定软件实体的行为,特别是其逻辑。由于它无法访问 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)并创建具有相同抽象的不同依赖图来做到这一点。(复杂,在一些博客中查看...这里不再详细说明)


推荐阅读