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

发布于 2024-11-25 07:15:28 字数 556 浏览 0 评论 0原文

我有一个 Robolectric 测试项目设置,但我还想在我的设备上运行这些测试,以检查我是否不会受到 JVM 与 Dalvik 实现差异的影响。

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

最好的方法是什么?


我目前拥有的:

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

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

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

I have a Robolectric test project setup, but I'd like to also run these tests on my device to check that I don't get bit by JVM vs Dalvik implementation differences.

Unlike robolectric tests, I won't run these tests frequently. My concern is that there's little effort to maintain the test suite and that they verify actual device functionality.

What's the best way to do that?


What I've currently got:

My robolectric test project as a test case TestPackage. I created an Android Test project with a test case TestRoboOnAndroid. It creates a TestPackage and has a test for each test in TestPackage.

Right now, every time I add a test to my robolectric suite, I need to manually add it to my device suite. Is there some way to do that automatically with reflection?

Also, Robolectric uses JUnit 4 (by default) and Android uses JUnit 3. So I have to write all of my Robolectric tests using JUnit 3 style (importing from junit.framework instead of org.junit).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

伴随着你 2024-12-02 07:15:28

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

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

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

The whole point of Robolectric is NOT to run it on the device and the design is based on that. If you want to run something on the device look at the default instrumentation tests from the SDK or Robotium.

It is totally feasible to run your Robolectric tests on the JVM and in addition create Robotium tests that rely on device specific interaction (e.g. creating screenshots, hardware differences...) and run on devices and emulators all combined into one build.

The easiest way to do that is to use the Android Maven Plugin.

意犹 2024-12-02 07:15:28

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

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

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

  • Android 框架测试。 Robolectric 无法解决的地方 - 要么因为阴影不存在,要么因为我大量使用 Android API(因此想要针对真实的东西进行测试) - 我编写在模拟器/设备上运行的测试默认框架。

分层的目的是让事情尽可能简单,从而使整个套件更快并有助于促进更清晰的代码。

I use a tiered system, where I prefer earlier tiers where possible:

  • Pure unit tests. I try to make as much code as possible fully independent of Android APIs, and then use "pure" unit tests which can run on any JVM. These tests are the fastest, and it helps keep code that has no need to be Android-specific portable.

  • Robolectric-supported unit tests. Where my code has only small dependencies on Android APIs, that can be satisfied by Robolectric shadows, I test it with Robolectric. There is a little more setup time for Robolectric compared to pure tests, but it's still faster than starting/running on an emulator.

  • Android framework tests. Where Robolectric doesn't cut it - either because the shadows don't exist, or because I'm heavily using Android APIs (and therefore want to test against the Real Thing) - I write test that run on the emulator/device with the default framework.

The point of the tiers is to keep things as simple as possible, which keeps the full suite faster and helps promote cleaner code.

我只土不豪 2024-12-02 07:15:28

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

We use Robolectric for unit testing against the JVM and Calabash-Android for system testing against Dalvik. Both can be integrated into our Jenkins CI build and between the two tools I feel that we cover all the bases.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文