【问题标题】:Best way to run Robolectric tests on Android device在 Android 设备上运行 Robolectric 测试的最佳方式
【发布时间】:2011-07-20 00:18:45
【问题描述】:

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

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

最好的方法是什么?


我目前拥有的:

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

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

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

【问题讨论】:

    标签: android junit robolectric


    【解决方案1】:

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

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

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

    【讨论】:

    • 我担心的不是设备问题。我正在使用一个库(org.xmlpull.v1.XmlPullParser),我必须运行我的 Robotium 测试的 jar 比 Android 版本更宽松。 (我用错了,我的 Robotium 测试没有检测到我的错误,因为测试运行的代码与设备不同。)我不想为所有东西都包含我自己的 jar,而是想打开一个开关来运行我的测试设备。它不需要很好——我不会经常运行它。它只需要帮助我保持理智。
    • 您是否真的将您的 apk 中的 org.xmlpull 部署到了设备上?否则这是不可能的。基本上听起来你在测试和设备上有一些错误的依赖关系......只需修复这些。
    • 我认为我们不在同一个页面上。我并不是说我不能在我的设备上运行 Robolectric 测试,只是因为我需要编写一个包装器(包含我的 Robolectric 套件中的每个测试的测试)很不方便。是的,我可以确保我的构建更喜欢我的 xmlpull jar 到 android 的,但是我通过在我的设备上运行我的 Robolectric 测试发现了这个问题。看到先有鸡还是先有蛋的问题了吗?
    • 这没有回答问题。期望能够在真实设备而不是模拟环境上免费运行相同的测试是完全合理的。如果您想通过“设计基于此”,那么我将使用基于使用不同测试运行器的 junit 设计。我正在更深入地研究这个问题,当我有一个真正的答案时,我会发布一个真正的答案。
    • 太棒了。我期待你的结果。
    【解决方案2】:

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

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

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

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

    层级的意义在于让事情尽可能简单,这样可以让整个套件更快,并有助于促进更简洁的代码。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-08-30
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-09
        相关资源
        最近更新 更多