在Android设备上运行机器人分子测试的最佳方法

在Android设备上运行机器人分子测试的最佳方法,android,junit,robolectric,Android,Junit,Robolectric,我有一个Robolectric测试项目设置,但我也希望在我的设备上运行这些测试,以检查JVM与Dalvik实现的差异是否会影响我 与机器人分子测试不同,我不会经常运行这些测试。我担心的是,几乎不需要维护测试套件,它们会验证实际的设备功能 最好的方法是什么 我目前得到的: 我的机器人测试项目是一个测试用例测试包。我用一个测试用例TestRoboOnAndroid创建了一个Android测试项目。它创建一个TestPackage,并对TestPackage中的每个测试都有一个测试 现在,每次我将测

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

与机器人分子测试不同,我不会经常运行这些测试。我担心的是,几乎不需要维护测试套件,它们会验证实际的设备功能

最好的方法是什么


我目前得到的:

我的机器人测试项目是一个测试用例测试包。我用一个测试用例TestRoboOnAndroid创建了一个Android测试项目。它创建一个TestPackage,并对TestPackage中的每个测试都有一个测试

现在,每次我将测试添加到我的robolectric套件中,我都需要手动将其添加到我的设备套件中。是否有某种方法可以通过反射自动实现这一点


此外,Robolectric使用JUnit4(默认情况下),Android使用JUnit3。因此,我必须使用JUnit3风格编写所有Robolectric测试(从
JUnit.framework
导入,而不是
org.JUnit
)。

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

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


最简单的方法是使用。

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

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

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

  • 机器人分子支持的单元测试。当我的代码对Android API只有很小的依赖性时,可以通过Robolectric shadows来满足,我用Robolectric来测试它。与纯测试相比,Robolectric的设置时间稍微多一些,但它仍然比在模拟器上启动/运行快

  • Android框架测试。在Robolectric没有解决这个问题的情况下——要么因为阴影不存在,要么因为我大量使用Android API(因此希望针对真实的东西进行测试)——我编写了在模拟器/设备上使用默认框架运行的测试


分层的目的是使事情尽可能简单,这使整个套件更快,并有助于促进代码更干净。

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