[英]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.