将 JUnit 测试移植到 Android 测试框架
Porting JUnit tests to Android Testing Framework
我打算将我的 JUnit 测试移植到 Android 测试框架。
有些测试只涉及JVM,不涉及Android系统,还需要移植吗? Android使用的是Dalvik,将在Lollipop中替换为ART(Android Runtime),两者都与JVM不同(如有错误请指正)。从这个意义上说,似乎有必要将所有 JUnit 测试移植到 Android 测试框架。
然而,一些教程认为
"If possible, you should prefer to run your unit tests directly on the
JVM as the test execution is much faster compared to the time required
to deploy and run the test on an Android device."
http://www.vogella.com/tutorials/AndroidTesting/article.html#androidtesting
我不是 JVM、Dalvik 或 ART 方面的专家。有人可以澄清这个问题吗?是否需要将仅涉及 JVM 的测试移植到 Android 测试框架?
谢谢!
最近,我查看了 Android SDK 中提供的 Android 测试支持。
据我所知,您可以编写单元测试,它可以在您的计算机或 CI 服务器(例如 Jenkins)中直接在 JVM 上执行,而无需 Android 设备或模拟器。唯一的要求是这些测试和被测试的代码必须用纯 Java 编写,不依赖于 Android SDK 和 Android 上下文。这些测试必须位于 src/test/java
目录中。您可以将 Android Studio 中 Build Variants 中的测试工件切换为 "Unit Tests" 和 运行 您的测试 IDE。您还可以通过 Gradle 包装器使用以下命令 运行 它们:./gradlew test
如果您的测试或要测试的代码依赖于 Android SDK 和 Android 上下文,您应该使用 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,但其余信息是最新的。看完这篇文章,你应该对这个话题有更好的理解了。
这取决于您想要测试的内容以及您 运行 测试所在的环境。
理论上,您编写的纯非 Android 特定 Java 代码(又名 POJO)可以在您 运行 它所在的任何虚拟机上运行——JVM、Dalvik , 或艺术。
如果您同意该理论,那么如果您已经 运行 在 JVM 上进行测试,则没有必要 运行 在 Dalvik 或 ART 上进行测试,特别是如果您考虑JVM 执行测试的速度。 (运行 它在 Dalvik 上涉及构建 apk、安装它,以及 运行ning adb shell 命令,这可能需要一些时间...)
当然,如果您觉得 Java 代码的行为可能会根据 运行 时间而改变,那么您可能应该将这些测试移植到 Android 测试中.
我打算将我的 JUnit 测试移植到 Android 测试框架。
有些测试只涉及JVM,不涉及Android系统,还需要移植吗? Android使用的是Dalvik,将在Lollipop中替换为ART(Android Runtime),两者都与JVM不同(如有错误请指正)。从这个意义上说,似乎有必要将所有 JUnit 测试移植到 Android 测试框架。
然而,一些教程认为
"If possible, you should prefer to run your unit tests directly on the JVM as the test execution is much faster compared to the time required to deploy and run the test on an Android device." http://www.vogella.com/tutorials/AndroidTesting/article.html#androidtesting
我不是 JVM、Dalvik 或 ART 方面的专家。有人可以澄清这个问题吗?是否需要将仅涉及 JVM 的测试移植到 Android 测试框架?
谢谢!
最近,我查看了 Android SDK 中提供的 Android 测试支持。
据我所知,您可以编写单元测试,它可以在您的计算机或 CI 服务器(例如 Jenkins)中直接在 JVM 上执行,而无需 Android 设备或模拟器。唯一的要求是这些测试和被测试的代码必须用纯 Java 编写,不依赖于 Android SDK 和 Android 上下文。这些测试必须位于 src/test/java
目录中。您可以将 Android Studio 中 Build Variants 中的测试工件切换为 "Unit Tests" 和 运行 您的测试 IDE。您还可以通过 Gradle 包装器使用以下命令 运行 它们:./gradlew test
如果您的测试或要测试的代码依赖于 Android SDK 和 Android 上下文,您应该使用 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,但其余信息是最新的。看完这篇文章,你应该对这个话题有更好的理解了。
这取决于您想要测试的内容以及您 运行 测试所在的环境。
理论上,您编写的纯非 Android 特定 Java 代码(又名 POJO)可以在您 运行 它所在的任何虚拟机上运行——JVM、Dalvik , 或艺术。
如果您同意该理论,那么如果您已经 运行 在 JVM 上进行测试,则没有必要 运行 在 Dalvik 或 ART 上进行测试,特别是如果您考虑JVM 执行测试的速度。 (运行 它在 Dalvik 上涉及构建 apk、安装它,以及 运行ning adb shell 命令,这可能需要一些时间...)
当然,如果您觉得 Java 代码的行为可能会根据 运行 时间而改变,那么您可能应该将这些测试移植到 Android 测试中.