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

Unit Test Cases with JUnit +(Robolectric or Mockito or both in Android)

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

所以我搜索了很多东西。

  • Robolectric framewordk-在JVM上运行
  • Mockito框架-模拟对象
  • 所以我对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!"));
    }
    }`