提问者:小点点

使用JUnit的单元测试用例(Android中的Robolectric或Mockito或两者兼而有之)


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

所以我搜索了很多东西。

  1. 机器人框架-在JVM上运行
  2. Mockito Framwork-模拟对象

所以我对机器人有些怀疑

  1. 我是否必须在Android应用程序中仅与JUnit一起使用Robolectric?
  2. 我应该在Android应用程序中仅在JUnit中使用Mockito吗?
  3. 我应该同时使用这两个框架吗?
  4. 莫奇托有什么区别

我在寻找Mokito之间的区别

请建议。


共3个答案

匿名用户

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

莫奇托

用于对您的类进行模拟。

当您测试一个特定的类时,您可以使用Mockito模拟它的所有依赖项。

在可能的情况下,您的大多数测试都应该使用mockito。为了实现这一点,大多数人将他们的代码分成MVP等,其中业务逻辑与视图逻辑分离。这样,您的业务逻辑(Presenter)对Android库没有知识(或依赖项),也不需要对它们进行模拟。

机器人

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

当测试运行时,Robolectric测试运行器将这些影子对象注入到实际的Android类中。这使得测试可以在JVM上运行,而无需启动Android实例。

当使用MVP你的视图层往往是由活动/片段实现的,这就是你可以使用Robolectric来模拟这些的地方。

注释

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

您可能还需要另一个库,例如PowerMock。这允许模拟静态类,例如Math,或者可用于模拟静态Android类,例如TextUtils。

两者都与JUnit一起使用

匿名用户

仅Mockito就可以涵盖大多数情况。

然而,Robolectric也可以在Android组件上提供有限的操作,例如单元测试中的Activity或Fragment(不是插桩测试,它不依赖于AndroidSDK),它不需要任何模拟器或设备,并且比插桩测试快得多。

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

如果有一些对AndroidSDK的依赖,请在单元测试中添加Robolectric。

匿名用户

首先,我们需要了解Robo电和Mockito是android测试驱动开发中常用的两种不同工具。所以大多数情况下,您会在同一个项目中找到这两种工具。

下面我将解释两者的常见用例——

Mockito用于模拟依赖关系,这意味着如果你想在测试环境中访问一个真实的对象,那么你需要伪造它,或者我们可以说模拟它。现在用Mockito模拟对象变得非常容易。

机器人电气是Android系统的行业标准单元测试框架。使用机器人电气,您的测试在JVM内的模拟Android环境中运行,没有模拟器的开销。使用机器人电气编写的简单测试是

`@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!"));
}
}`