需要使用 Mockito 的 Robolectric 示例来编写单元测试用例

Need example of Robolectric with Mockito to write the unit test case

如何将 Mocking (Mockito) 与 Robolectric 一起使用 任何人都可以建议我,我也想为 API 调用编写单元测试用例,我尝试 Robolectric 但是它只运行标签和动作但是对于 API 调用如何在 Android 测试包中编写单元测试,请帮助我

据我了解 Android 上的测试,您不会将 Mockito 与 Robolectric 结合使用。

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

另一方面,

Mockito 是一个允许您在 单元测试 中 :mock: 您的依赖项的库。单元测试的目的是测试特定软件实体的行为,具体是您希望测试的逻辑。由于它无法访问 android 框架(它不需要那个),所以它快 quite。

编辑:

其实更复杂。您可以将 Robolectric 与 Mockito 一起使用(通过引入 Mockito 规则作为 Runner - 您有 2 个 运行ners,一个 @RunWith(AndroidJunit4) - robolectric 一个,与 MockitoRule)。你可以只对需要使用 Robolectric 访问 android SDK 的东西进行单元测试,而无需实际启动 activity... 所以这些是我可以在 [=65= 上提出的测试配置]:

  1. (/test) 简单 JUnit

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

  3. (/test) AndroidJUnit (Robolectric) + Mockito 不启动 activity - 单元测试requires android sdk 实例和 mocking

  4. (/test) **AndroidJUnit (Robolectric) - 启动 activity,你用 espresso[=11= 测试 UI ]

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

或者你也可以有sharedTest。两者只有一个文件夹。有了这个,您也许可以选择 运行 在设备和 VM 上进行一次测试,我只是不确定如何。也许 Nitrogen 将来会引入这个选项。 https://blog.danlew.net/2015/11/02/sharing-code-between-unit-tests-and-instrumentation-tests-on-android/

现在可以为特定 class 设置测试环境的方法有很多。我希望 Nitrogen 项目能够简化这个决策并提供一个很好的文档。

编辑

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