将JUnit测试移植到Android测试框架

时间:2015-02-24 19:30:10

标签: android junit dalvik android-testing

我计划将我的JUnit测试移植到Android测试框架。

有些测试只涉及JVM但不涉及Android系统,是否还需要移植它们? Android正在使用Dalvik并将其替换为Lollipop中的ART(Android Runtime),两者都与JVM不同(如果我错了,请更正)。从这个意义上讲,似乎有必要将所有JUnit测试移植到Android测试框架。

但是,有些教程认为

  

"如果可能,您应该更喜欢直接在。上运行您的单元测试   与所需时间相比,JVM作为测试执行要快得多   在Android设备上部署和运行测试。"   http://www.vogella.com/tutorials/AndroidTesting/article.html#androidtesting

我不是JVM,Dalvik和ART的专家。有人可以澄清这个问题吗?是否有必要将仅涉及JVM的测试移植到Android测试框架?

谢谢!

2 个答案:

答案 0 :(得分:1)

最近,我查看了Android SDK中提供的Android测试支持。 据我所知,您可以编写单元测试,可以直接在您的计算机或CI服务器(例如Jenkins)的JVM上执行,而无需安装Android设备或模拟器。唯一的要求是这些测试和代码经过测试必须用纯Java编写,而不依赖于Android SDK和Android Context。这些测试必须位于src/test/java目录。您可以将Android Studio中的Build Variants中的测试工件切换为" Unit Tests"并使用IDE运行测试。您也可以使用以下命令通过Gradle包装器运行它们:./gradlew test

如果要测试的测试或代码取决于Android SDK和Android Context,则应使用Android Instrumentation测试,这些测试必须位于src/androidTest/java目录中。这些测试必须在Android设备或模拟器上执行。您可以在Android Studio中将测试工件切换为" Android Instrumentation Tests"并使用IDE运行测试或使用Gradle包装器命令./gradlew connectedCheck

您可以在http://tools.android.com/tech-docs/unit-testing-support查看有关单元测试的官方文章。值得一读。它有点过时了,因为现在你可以使用构建工具:1.1.0而不是1.1.0-rc1,但其余信息是最新的。阅读本文后,您应该更好地理解这个主题。

答案 1 :(得分:1)

这取决于您要测试的内容以及您在其中运行测试的环境。

理论上,您编写的纯非特定于Android的Java代码(也称为POJO)可以在您运行它的任何虚拟机上运行 - JVM,Dalvik或ART。

如果您同意该理论,那么如果您已经在JVM上运行测试,则无需在Dalvik或ART上运行它,特别是如果您考虑JVM执行测试的速度。 (在Dalvik上运行它涉及构建apk,安装它,并运行adb shell命令,这可能需要一些时间......)

当然,如果您认为Java代码的行为可能会因运行时而异,那么您应该将这些测试移植到Android测试中。