20

我有一个 Robolectric 测试项目设置,但我还想在我的设备上运行这些测试,以检查我没有被 JVM 与 Dalvik 实现差异所困扰。

与 robolectric 测试不同,我不会经常运行这些测试。我担心的是维护测试套件并验证实际设备功能的努力很少。

最好的方法是什么?


我目前拥有的:

我的 robolectric 测试项目作为测试用例 TestPackage。我使用测试用例 TestRoboOnAndroid 创建了一个 Android 测试项目。它创建一个 TestPackage 并为 TestPackage 中的每个测试提供一个测试。

现在,每次我向我的 robolectric 套件添加测试时,我都需要手动将它添加到我的设备套件中。有没有办法通过反射自动做到这一点?

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

4

3 回答 3

12

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

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

最简单的方法是使用Android Maven 插件

于 2011-10-14T19:31:04.057 回答
2

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

  • 纯单元测试。我尝试让尽可能多的代码完全独立于 Android API,然后使用可以在任何 JVM 上运行的“纯”单元测试。这些测试是最快的,它有助于保持不需要特定于 Android 的可移植代码。

  • Robolectric 支持的单元测试。我的代码对 Android API 的依赖很小,可以通过 Robolectric 阴影来满足,我使用 Robolectric 对其进行测试。与纯测试相比,Robolectric 的设置时间要多一些,但它仍然比在模拟器上启动/运行要快。

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

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

于 2014-07-17T10:40:16.883 回答
0

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

于 2014-07-16T13:26:19.753 回答