9

我正在接管一个 android 项目,我希望在项目中引入单元测试,以帮助避免可能的回归。

对于普通的 java 项目,我有两个源文件夹:srctest. 源文件夹包含我所有的src源文件,我的test源文件夹包含我所有的单元测试,我认为这是将测试与源分开的标准,因此您不必附带它们。

我一直在网上阅读,使用 android 应用程序的方法看起来有点不同。几个示例讨论了为 a 设置第二个项目,android test project然后引用android project.

我想确认几件事:

  1. 在测试 android 项目时,是否有第二个项目来测试合适的事情,或者我只是找到不好的例子?
  2. 所有单元测试都应该是android单元测试吗?例如,是的,它们都应该是,或者不,我应该在 android 单元测试和 junit 之间混合,因为 junit 的开销较小。
  3. android 单元测试比 junit 测试有什么额外的好处?例如模拟器的句柄等。
4

1 回答 1

8

在测试 android 项目时,是否有第二个项目来测试合适的事情,或者我只是找到不好的例子?

是的,通常有一个单独的“测试项目”来测试 Android 特定代码。http://developer.android.com/tools/testing/testing_android.html

所有单元测试都应该是android单元测试吗?例如,是的,它们都应该是,或者不,我应该在 android 单元测试和 junit 之间混合,因为 junit 的开销较小。

您通常会混合使用,因为您无法使用常规 ole' JUnit 在标准 JVM 上测试 Android 特定代码(不是没有一些帮助库,稍后会详细介绍)。

在实践中,我发现将应用程序划分为普通的 JVM 组件和 Android 部分是有意义的。例如,如果您需要与 REST API 通信,您可以拥有一个单独的组件,该组件仅执行此操作,并且是纯 Java。这些类型的组件可以很容易地使用标准 JUnit 进行测试。这种类型的架构还导致更清晰的职责分离,并且通常也更容易理解和维护设计。(这些组件可以作为常规 JAR 包含在您的 Android 应用程序中。)

android 单元测试比 junit 测试有什么额外的好处?例如模拟器的句柄等。

Android 测试可能会很慢而且很痛苦,因为完整的 Android 测试在模拟器(或设备上)中运行 Android 堆栈。然而,Android 测试对于测试应用程序中特定于 Android 的部分是必要的,例如 Context/Activity/Service 等。

由于原生 Android 测试的繁琐和缓慢的特性,已经创建了几个框架来模拟或存根 SDK 的部分并采用不同的方法来提供帮助。例如,您可能想研究一下 Robolectric 和 Robotium。(这些都有自己的优点和缺点。)

于 2013-04-16T18:13:56.473 回答