47

想知道哪个是为 android 应用程序和库编写单元测试用例的更好选择:使用 Robolectric 库或坚持使用 Android 测试框架。我想在命令行运行测试套件,并希望它独立于配置模拟器或让设备连接到构建机器的需要。你们中有人对这两者或更好的东西进行比较分析吗?您的经验将极大地帮助我决定更好的解决方案。

4

2 回答 2

103

我使用分层系统,在可能的情况下我更喜欢较早的层:

  1. 纯单元测试。我尝试让尽可能多的代码完全独立于 Android API,然后使用可以在任何 JVM 上运行的“纯”单元测试。这些测试是最快的,它有助于保持不需要特定于 Android 的可移植代码。
  2. Robolectric 支持的单元测试。我的代码对 Android API 的依赖性很小,可以通过 Robolectric 阴影来满足,我使用 Robolectric 对其进行测试。与纯测试相比,Robolectric 的设置时间要多一些,但它仍然比在模拟器上启动/运行要快。
  3. Android 框架测试。Robolectric 没有削减它的地方 - 要么是因为阴影不存在,要么是因为我大量使用 Android API(因此想针对真实事物进行测试) - 我编写了在模拟器/设备上运行的测试默认框架。

层级的重点是使事情尽可能简单,这使整个套件更快,并有助于促进更清洁的代码。

于 2013-02-22T09:27:57.677 回答
11

我在两者上都工作过,我发现的是:-

1) Robolectric 不支持 API 19,在其文档中提到 - http://robolectric.org/eclipse-quick-start/。这是它的一个很大的缺点。

2) Robolectric 在 JVM 上而不是在 DVM 上运行。所以我们无法检测到在特定时间 GPS 是否在设备中启用等。我们只能传递我们预先确定的值。

3) Robolectric 中的代码编写比 junit 复杂,特别是对于片段有很多复杂性和问题。

4) Robolectric 需要外部 jar 和配置,对于 junit 测试,我们不需要任何外部库。

5) Robolectric 更快,因为它在 JVM 上运行,但这也有缺点,我们无法在我们的设备上看到 UI,以及正在执行的屏幕代码。

对于 Android,我喜欢 jUnit 测试。

于 2015-02-19T09:37:24.167 回答