使用JUnit +的单元测试用例(Android中的Robolectric或Mockito或两者)

Dee*_*ary 33 android junit4 mockito robolectric

这是我第一次在Android中编写单元测试用例.

所以我搜索了很多东西.

  1. Robolectric framewordk - 在JVM上运行
  2. Mockito Framwork - 模拟物体

所以我对Robolectric和Mokito有些怀疑.

  1. 我是否必须在Android应用中仅使用Robolectric和JUnit?
  2. 我应该只在Android应用中使用Mockito吗?
  3. 我应该同时使用这两种框架吗?
  4. Mockito和Robolectric有什么区别?

我已经在寻找Mokito和Robolectric之间的区别,但没有得到任何正确的答案.

请建议.

Jah*_*old 42

它们的用法略有不同,我倾向于在我的项目中使用它们.

的Mockito

用于制造的嘲笑你的类.

当您测试特定的类时,您可以使用Mockito模拟其所有依赖项.

在可能的情况下,大多数测试应该使用mockito.为了实现这一点,大多数人将代码分解为MVP等,其中业务逻辑与View逻辑分离.这样,您的业务逻辑(Presenter)就不具备Android库的知识(或依赖关系),也不需要对它们进行模拟.

Robolectric

是一个包含许多Android类模拟的库.

在运行测试时,Robolectric测试运行器会注入这些"阴影对象"来代替实际的Android类.这使得测试可以在JVM上运行而无需启动Android实例.

当使用MVP时,View层往往由Activity/Fragment实现,这是你可以使用Robolectric来模拟它们的地方.

笔记

仅在必要时使用Robolectric.它基本上重新实现了Android框架的一部分,但并不总是以完全相同的方式实现.

您可能还需要其他库,例如PowerMock.这允许模拟诸如Math之类的静态类,或者可以用于模拟静态Android类,例如TextUtils.

两者都与JUnit一起使用


Eri*_*Liu 12

单独Mockito可以涵盖大多数情况.

但是,Robolectric还可以在Android组件上提供有限的操作,例如单元测试中的 Activity或Fragment (不是仪器测试,不依赖于Android SDK),它不需要任何仿真器或设备,并且比仪器测试快得多.

我的建议:使用Mockito进行单元测试,使用Espresso进行UI测试,因为它们是Android的半官方测试框架.

如果Android SDK存在某些依赖关系,请在单元测试中添加Robolectric.