这是我第一次在Android中编写单元测试用例。
所以我搜索过很多东西。
所以我对Robolectric& amp; Mokito。
我在寻找Mokito& Robolectric但没有得到任何正确答案。
请建议。
答案 0 :(得分:39)
它们的用法略有不同,我倾向于在我的项目中使用它们。
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一起使用
答案 1 :(得分:12)
然而,Robolectric还可以在Android组件上提供有限的操作,例如单元测试中的Activity或Fragment(不是仪器测试,它不依赖于Android SDK),它不需要任何模拟器或设备并且比仪器测试快得多。
我的建议:使用Mockito进行单元测试,使用Espresso进行UI测试,因为它们是Android的半官方测试框架。
如果Android SDK存在某些依赖关系,请在单元测试中添加Robolectric。
答案 2 :(得分:0)
首先,我们需要了解Roboelectric和Mockito是android测试驱动开发中常用的两种不同工具。因此,大多数情况下,您会在同一项目中找到这两种工具。
下面我将解释这两种情况的常见用例-
Mockito 用于模拟依赖关系,这意味着如果要在测试环境中访问真实对象,则需要伪造它,或者我们可以说是模拟它。如今,与对象注入(如匕首)一起对对象进行模拟非常容易。 参考-Unit testing with dagger
Roboelectric 是Android的行业标准单元测试框架。使用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!"));
}
}`