新聞中心
許多人在接觸到Android單元測(cè)試時(shí),第一反應(yīng)是Android單元測(cè)試是不是已經(jīng)完整集成了JUnit。很遺憾這不是事實(shí)。如果你按照J(rèn)Unit的運(yùn)行方法,卻不像上面那樣改用JDK,就一定會(huì)得到一個(gè)異常。

成都創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)涿州,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18982081108
實(shí)際上,TestCase這個(gè)類(lèi)用于在A(yíng)ndroid擔(dān)當(dāng)所有獨(dú)特的TestCase的基類(lèi)的作用,它是一個(gè)Abstract Class。Android單元測(cè)試類(lèi)繼承關(guān)系圖如下所示:
- #
- # 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:\Mydoc\EclipseWorkspace\TestAndroid\hs_err_pid4900.log
- #
- # If you would like to submit a bug report, please visit:
- # http://java.sun.com/webapps/bugreport/crash.jsp
- #
之所以有那么多XXXTestCase主要是為了簡(jiǎn)化工作。例如當(dāng)你想對(duì)一個(gè)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的功能進(jìn)行測(cè)試時(shí),首先需要自己?jiǎn)?dòng)并初始化數(shù)據(jù)庫(kù)。在這里是類(lèi)似的,如果你想測(cè)試一個(gè)Activity。
首先要啟動(dòng)它。而ActivityTestCase就會(huì)自動(dòng)幫你做完這些事情。而ActivityUnitTestCase會(huì)更注重測(cè)試的獨(dú)立性,它會(huì)讓測(cè)試與Android單元測(cè)試的聯(lián)系降到最低。其余的類(lèi)可以查看相關(guān)的Javadoc來(lái)按需挑選。要編寫(xiě)測(cè)試,就是找到合適的XXXTestCase作為基類(lèi)來(lái)繼承,并且編寫(xiě)自己的測(cè)試方法。
很明顯的,最簡(jiǎn)單的編寫(xiě)測(cè)試的方法就是繼承Android單元測(cè)試寫(xiě)一個(gè)自己的TestCase。然后為自己的一組TestCase寫(xiě)一個(gè)Activity界面,由界面控制TestCase的啟動(dòng),運(yùn)行和結(jié)果報(bào)告。
但是,你很快會(huì)發(fā)現(xiàn),為何要給測(cè)試寫(xiě)一個(gè)界面呢?這太詭異了。這時(shí)就需要一種技術(shù),它可以利用命令行(Shell)來(lái)啟動(dòng)一組測(cè)試,并且通過(guò)命令行的形式給出結(jié)果。這就是所謂的Instrumentation。
在Java下做單元測(cè)試必然用到JUnit。這里說(shuō)的JUnit是指從Apache基金會(huì)下載的junit.jar里提供的一系列單元測(cè)試功能。這些功能顯然是運(yùn)行在JDK之上的。在A(yíng)ndroid下已經(jīng)沒(méi)有了JDK。
自然也無(wú)法運(yùn)行JUnit。但是這并不妨礙我們利用JUnit編寫(xiě)單元測(cè)試。只不過(guò)在運(yùn)行單元測(cè)試時(shí),一定要用JDK來(lái)運(yùn)行,利用java命令來(lái)啟動(dòng)JUnit的某個(gè)Runner。如果是用Eclipse的話(huà),可以在Run Configuration里新建一個(gè)JUnit。但是一定要記得在Classpath選項(xiàng)卡里將Bootstrap Entries中的Android Library改成JRE,并且添加junit.jar。
這樣,在啟動(dòng)程序的時(shí)候就會(huì)先啟動(dòng)一個(gè)Application,然后在此Application運(yùn)行過(guò)程中根據(jù)情況加載相應(yīng)的Activity,而Activity是需要一個(gè)界面的。但是Instrumentation并不是這樣的。你可以將Instrumentation理解為一種沒(méi)有圖形界面的,具有啟動(dòng)能力的,用于監(jiān)控其他類(lèi)(用Target Package聲明)的工具類(lèi)。任何想成為Instrumentation的類(lèi)必須繼承
文章標(biāo)題:深度剖析Android單元測(cè)試問(wèn)題
瀏覽地址:http://fisionsoft.com.cn/article/dpjodje.html


咨詢(xún)
建站咨詢(xún)
