【问题标题】:Android unit test case automation: Robolectric library vs Android Testing frameworkAndroid 单元测试用例自动化:Robolectric 库 vs Android 测试框架
【发布时间】:2013-02-03 15:52:36
【问题描述】:

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

【问题讨论】:

  • 这个问题已经很老了。当我现在阅读documentation 时,似乎Android 测试框架是要走的路。这些不是命令行,但对于刚入门的人来说,here are some examples

标签: android unit-testing junit continuous-integration robolectric


【解决方案1】:

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

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

层级的意义在于让事情尽可能简单,这样可以让整个套件更快,并有助于促进更简洁的代码。

【讨论】:

  • 您是否创建了多个专门的测试项目以实现层级?
  • 我只使用了两个项目:一个用于两种类型的单元测试(纯和 Robotium),另一个用于框架测试。
  • 我在最近的设置中没有使用 Robotium,但主要是因为它不适合我正在开发的应用程序(主要是 OpenGL UI)。
  • @JasonSankey,你在哪里测试纯单元测试?通过 Roboelectric 还是在模拟器上?后者只会再次增加执行时间,我期待减少“纯”测试的时间。
  • 纯单元测试是那些不需要 Robolectric 或模拟器的测试,因为它们不涉及 Android API。它们运行在带有普通 Java API 的常规 JVM 上,因此速度非常快。
【解决方案2】:

我都做过,我发现的是:-

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 测试。

【讨论】:

    猜你喜欢
    • 2013-08-18
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2016-05-04
    相关资源
    最近更新 更多