[英]Android - JUnit testing Models/Controllers (which only use java imports) without the Android Emulator deploy
我的Android App項目有兩個不同的UnitTest項目。 一種用於模型類(僅使用java導入),另一種用於“活動”(顯然同時使用java和android導入)。
在Eclipse中,當我在這兩個UnitTest項目中的任何一個上使用選項運行方式 -> Android JUnit Test時,我在控制台中得到以下內容:
[2014-05-23 11:02:23 - MyProject.test] Android Launch!
[2014-05-23 11:02:23 - MyProject.test] adb is running normally.
[2014-05-23 11:02:23 - MyProject.test] Performing android.test.InstrumentationTestRunner JUnit launch
[2014-05-23 11:02:23 - MyProject.test] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'MyEmulator'
[2014-05-23 11:02:27 - MyProject.test] Application already deployed. No need to reinstall.
[2014-05-23 11:02:27 - MyProject.test] Project dependency found, installing: MyProject
[2014-05-23 11:02:30 - MyProject] Application already deployed. No need to reinstall.
[2014-05-23 11:02:30 - MyProject.test] Launching instrumentation android.test.InstrumentationTestRunner on emulator-5554
[2014-05-23 11:03:03 - MyProject.test] Sending test information to Eclipse
[2014-05-23 11:03:40 - MyProject.test] Test run finished
兩個UnitTest項目都可以工作並給出測試結果,但是由於它是使用仿真器進行測試的,因此要花一些時間才能顯示結果。
現在我的問題是 : 是否可以運行一個僅使用Java導入作為JUnit
的Android UnitTest項目,而不必使用模擬器? 這將導致更快的測試結果。
當我嘗試運行方式 -> JUnit測試選項時,出現以下錯誤:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (classFileParser.cpp:3494), pid=388, tid=1680
# Error: ShouldNotReachHere()
#
# JRE version: 6.0_31-b05
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.6-b01 mixed mode windows-amd64 compressed oops)
# An error report file with more information is saved as:
# C:\Users\...\MyProject.test\hs_err_pid388.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
我的測試班過去是:
public class MyUnitTest extends android.test.AndroidTestCase
{
public void aTest(){
...
assertSomething(...);
...
}
...
}
我以前使用Run As- > Android JUnit Test來運行它們。
我通過以下步驟對其進行了更改:
extends android.test.AndroidTestCase
。 import junit.framework.Assert;
並import org.junit.Test;
(警告:確保使用junit.framework.Assert
而不是org.junit.Assert
)。 @Test
。 assertSomething(...);
到Assert.assertSomething(...);
都fail(...);
到Assert.fail(...);
現在我的測試班是:
import junit.framework.Assert;
import org.junit.Test;
public class MyUnitTest
{
@Test
public void aTest(){
...
Assert.assertSomething(...);
...
}
...
}
現在,我可以通過Run As- > JUnit Test運行該項目。
更新:
當您啟動並運行該項目時,通過右鍵單擊Project-> Run as- > JUnit Test來同時在Eclipse中測試所有UnitTest都不是問題。 但是,當您嘗試測試單個UnitTest類時(例如您剛剛添加的類),可能會發生與我的問題相同的錯誤。
這些是您要在Test-Project中添加僅Java的UnitTest類時的步驟,該類僅使用Java庫並啟用Test類的單獨測試而不會出現錯誤:
import junit.framework.Assert;
並import org.junit.Test;
就像上面提到的。 @Test
和Assert.assertSomething(...);
) Android API
或Android Google API
。) 現在,您可以成功地在此單獨的Test-class上使用Run As- > JUnit Test ,而不必每次都被迫測試整個Project。
我希望這對嘗試為Android項目進行JUnit測試的人有所幫助。 PS:我還有第二個Test-Project,其中包含需要Android庫的JUnit Tests。 只要確保您要測試的類均未使用Android庫即可(例如Logcat消息,Test-Toasts或Patterns.WEB_URL.matcher(url).matches())
[ android.util.Patterns
]即可驗證字符串URL)正在純JUnit測試項目中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.