在 Java下做單元測(cè)試必然用到JUnit。這里說(shuō)的JUnit是指從Apache基金會(huì)下載的junit.jar里提供的一系列單元測(cè)試功能。這些功能顯 然是運(yùn)行在JDK之上的。在Android下已經(jīng)沒有了JDK,自然也無(wú)法運(yùn)行JUnit。但是這并不妨礙我們利用JUnit編寫單元測(cè)試。只不過在運(yùn)行 單元測(cè)試時(shí),一定要用JDK來(lái)運(yùn)行,利用java命令來(lái)啟動(dòng)JUnit的某個(gè)Runner。如果是用Eclipse的話,可以在Run Configuration里新建一個(gè)JUnit。但是一定要記得在Classpath選項(xiàng)卡里將Bootstrap Entries中的Android Library改成JRE,并且添加junit.jar。
很明顯的,這種測(cè)試是正規(guī)的Java單元測(cè)試,和Android沒有任何關(guān)系。你無(wú)法測(cè)試任何關(guān)于Android系統(tǒng)中的API,你寫的Activity,人機(jī)界面等等。所以,如果你想測(cè)試僅僅是一些封裝數(shù)據(jù)的對(duì)象,或者是純粹的數(shù)值計(jì)算,還是可以用這種方法的。
Android里面的junit.framework包是怎么回事?
很多人看到這個(gè)包的時(shí)候,第一反應(yīng)是Android是不是已經(jīng)完整集成了JUnit。很遺憾這不是事實(shí)。如果你按照J(rèn)Unit的運(yùn)行方法,卻不像上面那樣改用JDK,一定會(huì)得到一個(gè)異常:
#
# An unexpected error has been detected by Java Runtime Environment:
#
# Internal Error (classFileParser.cpp:2924), pid=4900, tid=4476
#Error: ShouldNotReachHere()
#
# Java VM: Java HotSpot(TM) Client VM (10.0-b19 mixed mode windows-x86)
# An error report file with more information is saved as:
# E:MydocEclipseWorkspaceTestAndroidhs_err_pid4900.log
#
# If you would like to submit a bug report, please visit:
#http://java.sun.com/webapps/bugreport/crash.jsp
#
實(shí)際上,TestCase這個(gè)類用于在Android擔(dān)當(dāng)所有獨(dú)特的TestCase的基類的作用,它是一個(gè)Abstract Class。Android單元測(cè)試類繼承關(guān)系圖如下所示:
之所以有那么多XXXTestCase主要是為了簡(jiǎn)化工作。例如當(dāng)你想對(duì)一個(gè)訪問數(shù)據(jù)庫(kù)的功能進(jìn)行測(cè)試時(shí),首先需要自己?jiǎn)?dòng)并初始化數(shù)據(jù)庫(kù)。在這里是 類似的,如果你想測(cè)試一個(gè)Activity,首先要啟動(dòng)它。而ActivityTestCase會(huì)自動(dòng)幫你做完這些事情。而 ActivityUnitTestCase會(huì)更注重測(cè)試的獨(dú)立性,它會(huì)讓測(cè)試與Android底層的聯(lián)系降到低。其余的類可以查看相關(guān)的Javadoc 來(lái)按需挑選。要編寫測(cè)試,是找到合適的XXXTestCase作為基類來(lái)繼承,并且編寫自己的測(cè)試方法。
很明顯的,簡(jiǎn)單的編寫測(cè)試的方法是繼承AndroidTestCase寫一個(gè)自己的TestCase。然后為自己的一組TestCase寫一個(gè)Activity界面,由界面控制 TestCase的啟動(dòng),運(yùn)行和結(jié)果報(bào)告。但是,你很快會(huì)發(fā)現(xiàn),為何要給測(cè)試寫一個(gè)界面呢?這太詭異了。這時(shí)需要一種技術(shù),它可以利用命令行(Shell)來(lái)啟動(dòng)一組測(cè)試,并且通過命令行的形式給出結(jié)果。這是所謂的Instrumentation。
wordend 相關(guān)閱讀:
MOTODEV初體驗(yàn),高效Android開發(fā)工具
詳解如何實(shí)現(xiàn)一個(gè)基本的Android用戶界面
Android應(yīng)用開發(fā)實(shí)戰(zhàn):GPS與加速度傳感器