这是我第一次在Android中编写单元测试用例。
所以我搜索了很多东西。
- Robolectric framewordk-在JVM上运行
- Mockito框架-模拟对象
所以我对Robolectric&Mokito。
- 我应该只在Android应用程序中与JUnit一起使用Robolectric吗
- 我应该只在Android应用程序中使用Mockito和JUnit吗
- 我应该同时使用这两个框架吗
- Mockito&机器人
我已经搜索了Mokito&Robolectric,但没有得到任何正确的答案。
请提出建议。
它们的用法略有不同,我倾向于在项目中同时使用这两种用法。
Mockito
用于制作您的类的mock。
当你测试一个特定的类时,你可以用Mockito模拟它的所有依赖项。
在可能的情况下,大多数测试都应该使用mockito。为了实现这一点,大多数人将他们的代码拆分为MVP等,其中业务逻辑与视图逻辑分离。这样,您的业务逻辑(Presenter)就不了解(或依赖)Android库,也不需要对它们进行模拟。
机器人
是一个库,包含许多Android类的mock。
Robolectric测试运行程序在测试运行时注入这些"阴影对象"来代替实际的Android类。这使得测试可以在JVM上运行,而无需启动Android实例。
当使用MVP时,您的视图层往往由活动/片段实现,这就是您可以使用Robolectric模拟这些的地方。
票据
仅在必要时使用Robolectric。它基本上重新实现了Android框架的一部分,但并不总是以完全相同的方式。
您可能还需要另一个库,如PowerMock。这允许模拟静态类(如Math),也可以用于模拟静态Android类(如TextUtils)。
两者都与JUnit 一起使用
Mockito一个人就可以覆盖大多数情况。
然而,Robolectric也可以在Android组件上提供有限的操作,如单元测试中的"活动"或"片段"(不是仪器测试,它不依赖于Android SDK),它不需要任何模拟器或设备,并且比仪器测试快得多。
我的建议是:使用Mockito进行单元测试,使用Espresso进行UI测试,因为它们是Android的半官方测试框架。
如果对Android SDK有一些依赖,请在单元测试中添加Robolectric。
首先,我们需要了解Roboelectric和Mockito是android测试驱动开发中常用的两种不同工具。所以大多数情况下,你会在同一个项目中找到这两种工具。
下面我将解释两者的常见用例-
Mockito用于模拟依赖关系,这意味着如果你想在测试环境中访问一个真实的对象,那么你需要伪造它,或者我们可以说mock它。现在,用Mockito模拟对象变得非常容易。
Roboelectric是安卓系统的行业标准单元测试框架。使用Robolectric,您的测试可以在JVM内的模拟Android环境中运行,而无需模拟器的开销。使用roboelectric编写的简单测试是
`@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!"));
}
}`