在Android设备上运行Robolectric测试的最佳方式

时间:2011-07-20 00:18:46

标签: android junit robolectric

我有一个Robolectric测试项目设置,但我也想在我的设备上运行这些测试,以检查我是不是因为JVM与Dalvik的实现差异而没有得到。

与robolectric测试不同,我不会经常运行这些测试。我担心的是,维护测试套件并没有付出太多努力,并且他们会验证实际的设备功能。

最好的方法是什么?


我目前得到了什么:

我的robolectric测试项目作为测试用例TestPackage。我用测试用例TestRoboOnAndroid创建了一个Android Test项目。它创建一个TestPackage并对TestPackage中的每个测试进行测试。

现在,每次我向我的robolectric套件添加测试时,我都需要手动将其添加到我的设备套件中。有没有办法用反射自动完成?

此外,Robolectric使用JUnit 4(默认情况下),Android使用JUnit 3.所以我必须使用JUnit 3样式编写所有Robolectric测试(从junit.framework而不是org.junit导入)。

3 个答案:

答案 0 :(得分:11)

Robolectric的重点不在于它在设备上运行,设计就是基于此。如果您想在设备上运行某些内容,请查看SDK或Robotium中的默认检测测试。

在JVM上运行Robolectric测试是完全可行的,另外创建依赖于设备特定交互的Robotium测试(例如创建屏幕截图,硬件差异......)并在设备和模拟器上运行,所有这些测试都组合成一个版本。

最简单的方法是使用Android Maven Plugin

答案 1 :(得分:1)

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

  • 纯单元测试。我尝试尽可能多地创建完全独立于Android API的代码,然后使用可以在任何JVM上运行的“纯”单元测试。这些测试速度最快,并且有助于保留不需要特定于Android的便携式代码。

  • Robolectric支持的单元测试。我的代码只对Android API有很小的依赖性,Robolectric阴影可以满足这一点,我用Robolectric进行测试。与纯测试相比,Robolectric的设置时间稍长,但它仍然比在仿真器上启动/运行更快。

  • Android框架测试。 Robolectric没有削减它 - 或者因为阴影不存在,或者因为我大量使用Android API(因此想要针对Real Thing进行测试) - 我编写了在模拟器/设备上运行的测试默认框架。

层级的关键是尽可能保持简单,这样可以使整个套件更快,并有助于推广更清晰的代码。

答案 2 :(得分:0)

我们使用Robolectric进行针对JVM和Calabash-Android的单元测试,以针对Dalvik进行系统测试。两者都可以集成到我们的Jenkins CI构建中,在这两个工具之间,我觉得我们涵盖了所有基础。