idb*_*rii 19 junit android 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).
Man*_*ser 11
Robolectric的重点不是在设备上运行,而是基于此设计.如果要在设备上运行某些内容,请查看SDK或Robotium中的默认检测测试.
在JVM上运行Robolectric测试是完全可行的,另外创建依赖于设备特定交互的Robotium测试(例如创建屏幕截图,硬件差异......)并在设备和模拟器上运行所有组合成一个构建.
最简单的方法是使用Android Maven插件.
我使用分层系统,在可能的情况下我更喜欢较早的层级:
纯单元测试。我尝试使尽可能多的代码完全独立于 Android API,然后使用可以在任何 JVM 上运行的“纯”单元测试。这些测试是最快的,并且有助于保持不需要特定于 Android 的代码的可移植性。
Robolectric 支持的单元测试。如果我的代码对 Android API 的依赖性很小,可以通过 Robolectric 影子来满足,我会使用 Robolectric 进行测试。与纯测试相比,Robolectric 的设置时间要多一些,但它仍然比在模拟器上启动/运行要快。
Android框架测试。Robolectric 无法解决的地方 - 要么因为阴影不存在,要么因为我大量使用 Android API(因此想要针对真实的东西进行测试) - 我编写在模拟器/设备上运行的测试默认框架。
分层的目的是让事情尽可能简单,从而使整个套件更快并有助于促进更清晰的代码。