44

想知道为Android应用程序和库编写单元测试用例的更好选择:使用Robolectric库还是坚持使用Android测试框架。我想在命令行中运行测试套件,并且希望它独立于配置模拟器的需要,或者让设备附带构建机器。你们中的任何一个人都对这些或者更好的东西进行了比较分析?您的经验将帮助我决定更好的解决方案。Android单元测试用例自动化:Robolectric库与Android测试框架

+1

这个问题很旧。正如我现在阅读[文档](https://developer.android.com/training/testing/index.html),似乎Android测试框架是要走的路。这些不是命令行,但对于刚开始的人来说,[这里是一些例子](http://stackoverflow.com/a/43626962/3681880)。 – Suragch 2017-04-26 07:27:12

回答

93

我用一个分层系统,在这里我更喜欢较早层在可能的情况:

  1. 纯单元测试。我尝试尽可能地使代码尽可能独立于Android API,然后使用可在任何JVM上运行的“纯”单元测试。这些测试是最快的,它有助于保持代码不需要是特定于Android的便携式应用程序。
  2. Robolectric支持的单元测试。在我的代码对Android API只有很小的依赖性的情况下,Robolectric阴影可以满足这一点,我使用Robolectric进行测试。与纯粹的测试相比,Robolectric有更多的设置时间,但它比在模拟器上启动/运行还要快。
  3. Android框架测试。 Robolectric没有削减它 - 要么是因为阴影不存在,要么是因为我大量使用Android API(因此想要测试真实的东西) - 我编写的测试在仿真器/设备上运行默认框架。

层次的要点是尽可能简化事情,这样可以使整个套件更快,并且有助于促进更干净的代码。

+1

您是否创建了多个专用测试项目tom实现层? – bianca 2013-02-24 01:47:53

+1

我只用了两个项目:一个用于两种类型的单元测试(纯和Robotium),另一个用于框架测试。 – 2013-02-24 09:52:44

+0

再次感谢!你使用任何代码覆盖工具? – bianca 2013-02-25 17:29:07

5

我曾在这两个,我发现了什么是: -

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

2)Robolectric在JVM上运行,不在DVM上。所以我们不能 检测到,在该特定时间GPS是否启用设备或不 等。我们只能通过我们的预先决定的价值。

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

4)Robolectric需要外部罐和配置,并且对于junit测试 我们不需要任何外部库。 5)Robolectric运行速度更快,因为它运行在JVM上,但这也有缺点,我们无法在设备上看到UI,屏幕代码 正在执行。

对于Android,我喜欢jUnit测试。