Androidunit testing用例自动化:Robolectric库与Androidtesting框架

想知道为Android应用程序和库编写unit testing用例的更好select:使用Robolectric库还是坚持使用Androidtesting框架。 我想在命令行运行testing套件,并且希望它独立于configuration模拟器的需要,或者让一台设备连接到构build机器。 你们中的任何一个人都对这些或更好的东西进行比较分析? 您的经验将帮助我决定更好的解决scheme。

我使用分层系统,在那里我更喜欢更早的层级,

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

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

他们根本不同。 Roboelectrictesting运行在虚拟机内部,真的很快,但是Androidtesting框架testing在模拟器/设备内部运行,这会给你更多真实世界的感觉,但速度更慢。

针对不同需求的不同工具 我build议在开发过程中使用Roboeletric,但在启动之前使用Android Testing框架进行最终彻底的仿真器和设备testing。

另外检查出Robotium和勺子 。

我在两个工作,我发现是:

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

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

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

4)Robolectric需要外部jar和configuration,junittesting我们不需要任何外部库。

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

对于Android,我喜欢jUnittesting。