2015-02-24 448 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,但其餘信息是最新的。閱讀本文後,您應該更好地理解此主題。