2015-02-24 85 views
1

我打算将我的JUnit测试移植到Android测试框架。将Android 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测试框架?

谢谢!

回答

1

这取决于你想测试和您在其中运行测试的环境是什么。

从理论上讲,你写上会工作的纯非Android特定的Java代码(亦称POJO)中的任何你运行它的虚拟机 - JVM,Dalvik或ART。

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

当然,如果您觉得Java代码的行为可能会根据运行时,那么你应该将这些测试转移到你的Android测试。

+0

谢谢!你可以发布这个理论的链接吗(你编写的“纯非Android专用Java代码(又名POJOs)”可以在你运行它的任何虚拟机上工作 - JVM,Dalvik或ART。“)? – hackjutsu 2015-02-26 18:38:20

1

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

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

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