使用 JUnit 的单元测试用例 +(Robolectric 或 Mockito 或两者都在 Android)
Unit Test Cases with JUnit +(Robolectric or Mockito or both in Android)
这是我第一次在Android中编写单元测试用例。
所以我搜索了很多东西。
- Robolectric framewordk - 在 JVM 上运行
- Mockito Framwork - 模拟对象
所以我对Robolectric和Mokito有些怀疑。
- 我是否必须在 Android 应用程序中仅将 Robolectric 与 JUnit 一起使用?
- 我应该只在 Android 应用程序中将 Mockito 与 JUnit 一起使用吗?
- 我应该同时使用这两个框架吗?
- Mockito 和 Robolectric 有什么区别?
我搜索了 Mokito 和 Robolectric 之间的区别,但没有得到任何正确的答案。
求推荐。
Mockito本身就可以覆盖大部分情况。
但是,Robolectric也可以提供对Android组件的有限操作,例如Activity或单元测试中的Fragment(不是仪器测试,它不依赖于 Android SDK),它不需要任何模拟器或设备,并且比仪器测试快得多。
我的建议:使用 Mockito 进行单元测试,使用 Espresso 进行 UI 测试,因为它们是 Android.
的半官方测试框架
如果对 Android SDK 有一些依赖性,请在您的单元测试中添加 Robolectric。
它们的用法略有不同,我倾向于在我的项目中同时使用它们。
Mockito
用于模拟 你的 classes。
当您测试特定的 class 时,您会使用 Mockito 模拟其所有依赖项。
您的大部分测试都应该尽可能使用 mockito。为了使这成为可能,大多数人将他们的代码拆分为 MVP 等,其中业务逻辑与视图逻辑分离。这样,您的业务逻辑(Presenter)就不会了解(或依赖)Android 库,也不需要模拟它们。
Robolectric
是一个库,其中包含许多 Android classes.
的模拟
Robolectric 测试 运行ner 在测试 运行 时注入这些 'shadow objects' 代替实际的 Android classes .这就是允许测试在 JVM 上 运行 而无需启动 Android.
实例的原因
当使用 MVP 时,您的视图层往往由 Activity/Fragment 实现,这是您可以使用 Robolectric 模拟这些的地方。
备注
仅在必要时使用Robolectric。它基本上重新实现了 Android 框架的某些部分,但并不总是以完全相同的方式实现。
您可能还需要另一个 库,例如 PowerMock。这允许模拟静态 classes,例如 Math 或可用于模拟静态 Android classes,例如 TextUtils.
两者都与 JUnit 一起使用
首先我们需要了解Roboelectric和Mockito是android测试驱动开发中常用的两种不同的工具。所以大多数情况下,您会在同一个项目中找到这两种工具。
下面我将解释这两个的常见用例-
Mockito 用于模拟依赖关系,这意味着如果你想在测试环境中访问真实对象,那么你需要伪造它或者我们可以说模拟它。现在,使用 Mockito 模拟对象变得非常容易。
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!"));
}
}`
这是我第一次在Android中编写单元测试用例。
所以我搜索了很多东西。
- Robolectric framewordk - 在 JVM 上运行
- Mockito Framwork - 模拟对象
所以我对Robolectric和Mokito有些怀疑。
- 我是否必须在 Android 应用程序中仅将 Robolectric 与 JUnit 一起使用?
- 我应该只在 Android 应用程序中将 Mockito 与 JUnit 一起使用吗?
- 我应该同时使用这两个框架吗?
- Mockito 和 Robolectric 有什么区别?
我搜索了 Mokito 和 Robolectric 之间的区别,但没有得到任何正确的答案。
求推荐。
Mockito本身就可以覆盖大部分情况。
但是,Robolectric也可以提供对Android组件的有限操作,例如Activity或单元测试中的Fragment(不是仪器测试,它不依赖于 Android SDK),它不需要任何模拟器或设备,并且比仪器测试快得多。
我的建议:使用 Mockito 进行单元测试,使用 Espresso 进行 UI 测试,因为它们是 Android.
的半官方测试框架如果对 Android SDK 有一些依赖性,请在您的单元测试中添加 Robolectric。
它们的用法略有不同,我倾向于在我的项目中同时使用它们。
Mockito
用于模拟 你的 classes。
当您测试特定的 class 时,您会使用 Mockito 模拟其所有依赖项。
您的大部分测试都应该尽可能使用 mockito。为了使这成为可能,大多数人将他们的代码拆分为 MVP 等,其中业务逻辑与视图逻辑分离。这样,您的业务逻辑(Presenter)就不会了解(或依赖)Android 库,也不需要模拟它们。
Robolectric
是一个库,其中包含许多 Android classes.
的模拟Robolectric 测试 运行ner 在测试 运行 时注入这些 'shadow objects' 代替实际的 Android classes .这就是允许测试在 JVM 上 运行 而无需启动 Android.
实例的原因当使用 MVP 时,您的视图层往往由 Activity/Fragment 实现,这是您可以使用 Robolectric 模拟这些的地方。
备注
仅在必要时使用Robolectric。它基本上重新实现了 Android 框架的某些部分,但并不总是以完全相同的方式实现。
您可能还需要另一个 库,例如 PowerMock。这允许模拟静态 classes,例如 Math 或可用于模拟静态 Android classes,例如 TextUtils.
两者都与 JUnit 一起使用
首先我们需要了解Roboelectric和Mockito是android测试驱动开发中常用的两种不同的工具。所以大多数情况下,您会在同一个项目中找到这两种工具。
下面我将解释这两个的常见用例-
Mockito 用于模拟依赖关系,这意味着如果你想在测试环境中访问真实对象,那么你需要伪造它或者我们可以说模拟它。现在,使用 Mockito 模拟对象变得非常容易。
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!"));
}
}`