Unit Test Cases with JUnit +(Robolectric or Mockito or both in Android)
这是我第一次必须在Android中编写单元测试用例。
所以我搜索了很多东西。
所以我对Robolectric有一些疑问
它们的用法略有不同,我倾向于在我的项目中同时使用它们。
Mockito
用于制作类的模拟。
在测试特定类时,可以使用Mockito模拟其所有依赖项。
在可能的情况下,大多数测试应使用模仿。为了做到这一点,大多数人将他们的代码拆分为MVP,等等,在其中将业务逻辑与View逻辑分开。这样,您的业务逻辑(Presenter)就不会对Android库有任何了解(或依赖),也不需要模拟它们。
机器人
是一个包含许多Android类模拟的库。
运行测试时,Robolectric测试运行程序将这些"阴影对象"注入到实际的Android类中。这就是使测试能够在JVM上运行而无需启动Android实例的原因。
使用MVP时,您的View层往往由Activity / Fragment实现,在这里您可以使用Robolectric来模拟它们。
注意事项
仅在必要时使用Robolectric。它基本上重新实现了Android框架的各个部分,但并不总是以完全相同的方式实现。
您可能还需要另一个库,例如PowerMock。这样可以模拟静态类(例如Math),也可以模拟静态Android类(例如TextUtils)。
两者都与JUnit
一起使用
仅Mockito即可涵盖大多数情况。
但是,Robolectric还可以在Android组件上提供有限的操作,例如单元测试中的"活动"或"片段"(不是仪器测试,不依赖于Android SDK),它不需要任何仿真器或设备,并且比仪器运行速度快得多测试。
我的建议:将Mockito用于单元测试,将Espresso用于UI测试,因为它们是Android的半官方测试框架。
如果对Android SDK有某些依赖性,请在您的单元测试中添加Robolectric。
首先,我们需要了解Roboelectric和Mockito是android测试驱动开发中常用的两种不同工具。因此,大多数情况下,您会在同一项目中找到这两个工具。
下面我将解释这两者的常见用例-
Mockito用于模拟依赖关系,这意味着如果您想在测试环境中访问真实对象,则需要伪造它,或者我们可以说模拟它。现在,使用Mockito对对象进行模拟非常容易。
Roboelectric是Android的行业标准单元测试框架。使用Robolectric,您的测试可以在JVM内的模拟Android环境中运行,而无需模拟器的开销。
使用roboelectric编写的简单测试is
1 2 3 4 5 6 7 8 9 10 11 12 13 | `@RunWith(AndroidJUnit4.class) public class MyActivityTest { @Test public void clickingButton_shouldChangeResultsViewText() throws Exception { Activity activity = Robolectric.setupActivity(MyActivity.class); Button button = (Button) activity.findViewById(R.id.press_me_button); TextView results = (TextView) activity.findViewById(R.id.results_text_view); button.performClick(); assertThat(results.getText().toString(), equalTo("Testing Android Rocks!")); } }` |