Android Junit 测试与普通 Junit 测试

Posted

技术标签:

【中文标题】Android Junit 测试与普通 Junit 测试【英文标题】:Android Junit Testing vs. Normal Junit Testing 【发布时间】:2013-04-16 18:00:21 【问题描述】:

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

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

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

我想确认几件事:

    在测试 android 项目时,是否有第二个项目来测试合适的事情,或者我只是发现了不好的例子? 所有单元测试都应该是android单元测试吗?例如。是的,它们都应该是,否则我应该在 android 单元测试和 junit 之间混合使用,因为 junit 的开销较小。 android 单元测试相对于junit 测试有哪些额外的好处?例如。模拟器等的句柄。

【问题讨论】:

【参考方案1】:

是否有第二个项目来测试合适的事情 当涉及到测试 android 项目或者我只是发现不好 例子?

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

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

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

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

与 junit 测试相比,android 单元测试有哪些额外的好处? 例如。模拟器等的句柄。

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

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

【讨论】:

以上是关于Android Junit 测试与普通 Junit 测试的主要内容,如果未能解决你的问题,请参考以下文章

JUnit5 安装与使用

Spring与junit4集成测试

Android JUnit Test——批量运行测试代码

Android单元测试系列-Junit

Android单元测试系列-Junit

通过JUnit进行Android单元测试