版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Android測試教程目錄Android測試教程1Android測試教程(1):概述1Android測試教程(2):測試基礎(chǔ)2Android測試教程(3):測試項目3Android測試教程:測試相關(guān)API6Android測試教程(5):第一個測試項目HelloWorldTest8Android測試教程(6):測試Activity11Android測試教程(7):測試ContentProvider12Android測試教程(8):測試Service13Android測試教程(9):ApplicationTestCase示例13Android測試教程(10):ActivityInstrumenta
2、tionTestCase2示例17Android測試教程(11):ActivityUnitTestCase示例18Android測試教程(12):ServiceTestCase示例20Android測試教程(13):TestCase示例22Android測試教程(14):ActivityInstrumentationTestCase2示例23Android測試教程(15):AndroidTestCase示例25Android測試教程(16):monkeyrunner簡介27Android測試教程(17):Monkey命令行工具28Android測試教程(18):總結(jié)32來源:csdn作者:ma
3、pdigitAndroid測試教程:概述測試也是開發(fā)過程中一個重要組成部分,Android開發(fā)環(huán)境集成一個測試框架可以用來測試Android應(yīng)用的各個方面,單元測試,UI測試等。本教程基于Android開發(fā)教程英文版?;靖拍畎?Android測試的基礎(chǔ)知識 ActivityTesting側(cè)重于Activity的測試,介紹了如果使用Instrumentation在正常Activity生命周期之外來控制Activity,然后測試Activity的特定的功能和測試UI的一些技巧。 ContentProviderTesting側(cè)重測試ContentProvider。 ServiceTesting側(cè)
4、重測試Service。 需要測試的內(nèi)容等。以及在EclipseADT開發(fā)環(huán)境下如何創(chuàng)建一個測試項目和Android開發(fā)工具提供的一些測試工具。在閱讀本測試教程之前,你需要有Android開發(fā)的一些基本知識,可以參見Android開發(fā)教程,此外需要了解一些JUnit的基本概念。并又ApiDemo中的測試示例進行解析。Android測試教程:測試基礎(chǔ)Android測試框架(AndroidTestingFramework)為Android開發(fā)環(huán)境的一個組成部分,可以用來測試Android的各個方面,從單元測試到框架測試到UI測試等。其主要功能有: Android測試框架基于JUnit,因此可以直接使
5、用JUnit來測試一些與Android平臺不是很相關(guān)的類,或者使用Android的JUint擴展來測試Android組件,如果你剛開始接觸Android測試,可以先從AndroidTestCase寫一些通用的測試用例,然后再寫較復雜的測試用例。 AndroidJUint擴展提供了對Android特定組件(如Activity,Service)的測試支持,這些擴展類提供了一些輔助方法來幫助創(chuàng)建測試使用的“樁”類或方法。 創(chuàng)建的測試包包含中一個測試包中,這個測試包和主應(yīng)用程序包具有類似的結(jié)構(gòu),創(chuàng)建測試包的步驟和創(chuàng)建Android應(yīng)用的方法基本類似。 Eclipse的ADT包含了創(chuàng)建測試用例的SDKX
6、具,并提供用于和其它IDE集成的命令行工具。這些工具可以從被測試的應(yīng)用程序包讀取所需信息用于創(chuàng)建測試項目的build文件,mainfest文件和文件目錄結(jié)構(gòu)等。 SDKtk提供了一個moneyrunner(一個python應(yīng)用)可以模擬用戶按鍵事件來測試UI。卜圖為Android測試框架的一個總結(jié):Android測試教程:測試項目Android的編譯和測試工具需要測試項目組織符合預(yù)訂的結(jié)構(gòu):分別為Testcase類,Testcase包以及測試項目。JUnit為Android的測試的基礎(chǔ),一般來說,一個JUint測試為一個用來測試一個應(yīng)用某一部分的語句。你可以將多個測試Test方法組織起來構(gòu)成一
7、個測試用例(Testcase),多個測試用例可以構(gòu)成TestSuites。每個Test方法相對獨立,一個測試類Testclass包含一組相關(guān)的Test或其它輔助方法。在Android平臺上,你可以使用測試工具調(diào)入TestPackage和所要測試的應(yīng)用,然后執(zhí)行TestRunner來運行測試用例。使用EclipseADT工具創(chuàng)建測試項目的方法:1.在創(chuàng)建應(yīng)用的同時創(chuàng)建測試項目,如下圖AppliationTestBrowse.*Nev;AndroidProjectNewAndruidTestProjectCwatMarhewAndroidTertProjttresource.Content0Use
8、defaultlocationLocatior:C;/ecIipse/workspace/App11ationTestTertTargetTestTargetPackage:com.p-streets.testBuildTargetTargetNameVendorPlatformAPILeDAndroid1.5AndroidOpenSourceProject1.53選中GoogleAPIsHAndroidL6GoogleAPIsAndroid2.1-updatelpGoogleAPIs|Android乙2GoogleAPIs口GALAXYTabAddon Android2.3J|GoogleA
9、PIs EDK11I1CreateaTestProject,GoogleIhgAndroid。昨nSour%ProjectGoogleJnc.AndroidOpenSourceProjectGoogle(ncAndroidOpenSourceProjectGoogleInc.SamsungElectronicsCo.,Ltd.AndreidOpenSourceProjectGoogleInc.SonyEricssonMobileCcmmunicaticnsABflADT自動為應(yīng)用創(chuàng)建對應(yīng)的測試項目1,53L64L642.1-updatel721-updatel322811S2JS2slg2.3
10、.1923,19III2.導入已有的測試項目,并和被測試的應(yīng)用關(guān)聯(lián)。AndroidSDK自帶ApiDemo,并帶有其對應(yīng)的測試項目ApiDemos->Test.打開ApiDemos->Test的方法如下,首先是選中BuildTarget(比如Android2.2),然后選擇Createprojectfromexistingsample,從下拉列表中選擇ApiDemos->Tests(注意你要先創(chuàng)建ApiDemosAndroidApiDemos示例解析(1):創(chuàng)建ApiDemo示例)將ApiDemos->tests和ApiDemos關(guān)聯(lián)起來:的項目Projects中添修改
11、ApiDemos->tests測試項目的屬性,在JavaBuildPath力口ApiDemos你最女?使Eclipse工具創(chuàng)建測試項目:作為運行TestPackage或其子類做為Test自動為你的測試項目設(shè)置使用InstrumentationTestRunner的TestRunner,測試項目必須使用InstrumentationTestRunnerPackage的runner.為測試項目創(chuàng)建合適的項目名稱和測試包名稱,比如你需要測試的應(yīng)用的包名稱為com.mydomain.myapp貝U自動創(chuàng)建的測試包名為com.mydomain.myapp.test,從測試包名可以很容易找到對應(yīng)的應(yīng)
12、用程序包名稱。自動創(chuàng)建合適的build文件,mainifest文件和文件目錄結(jié)構(gòu)。建議使用的文件目錄結(jié)構(gòu)可以如下所示:MyProjectZAndroidManifest.xmlresZ,(resourcesformainapplication)srcZ(sourcecodeformainapplication)tests/-AndroidManifest.xml-res/-,(resourcesfortests)-src/-,(sourcecodefortests)Android測試教程:測試相關(guān)APIAndroid的測試框架相關(guān)的API主要定義在三個包中: android.test用于編寫A
13、ndroid測試用例 android.test.mock定義了方便測試用的測試"樁"類 android.test.suitebuilder運行測試用例的TestRunner類Android測試API是基于JUnit擴展而來,并添加了與Android平臺相關(guān)的測試API。JUnit你可以直接使用JUnit中相關(guān)API編寫一些和平臺無關(guān)的測試用例(基于TestCase),Android測試API中提供了一個TestCase的子類AndroidTestCase,可以用來編寫一些Android相關(guān)的對象的測試用例,AndroidTestCase支持一些和平臺相關(guān)的setup,tea
14、rdown以及setup方法。你也可以直接使用JUnit的Assert方法顯示測試結(jié)果,這些Assert方法可以通過比較預(yù)期的值和實際的值,如果不同可以排除異常。Android測試API擴展了一些Assert方法用于支持和Android平臺相關(guān)的比較。要注意的是,Android測試API支持JUnit3代碼風格,而不支持JUnit4代碼風格,也只能使用InstrumentationTestRunner來運行測試用例。InstrumentationAndroid的Instrumentation提供了一些"鉤子"方法連接到Android操作系統(tǒng)中,可以獨立控制Android組件
15、(Activity,Service等)的生命周期,并可以控制Android如何調(diào)用一個應(yīng)用。在通常情況下(普通的Android應(yīng)用),Android的activity,Service等的生命周期是由Android操作系統(tǒng)來控制的。比如一個Activity的生命周期開始于onCreate(由某個Intent激活),然后是onResume.可以參見Android簡明開發(fā)教程五:Activities。應(yīng)用程序本身無法直接控制這些生命周期狀態(tài)的切換。但使用InstrumatationAPI時你可以直接調(diào)用這些方法。一個進程中,這在通常的情況下是不可能實現(xiàn)的。使用InstrumentationAPI你可
16、以直接調(diào)用Activity或是Service的生命周期回調(diào)函數(shù),從而可以讓你運行一步一步的運行Activity或是Service的生命周期函數(shù)。如下例顯示了如何使用InstrumentationAPI來測試Activity保持和恢復State。/Startthemainactivityofthe/applicationundertestmActivity=getActivity();/GetahandletotheActivityobject's/mainUIwidget,aSpinnermSpinner=(Spinner)mActivity.findViewById(com.andr
17、oid.example.spinner.R.id.Spinner01);/SettheSpinnertoaknownpositionmActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION);/Stoptheactivity-TheonDestroy()/methodshouldsavethestateoftheSpinnermActivity.finish();/Re-starttheActivity-theonResume()/methodshouldrestorethestateoftheSpinnermActivity=getAc
18、tivity();/GettheSpinner'scurrentpositionintcurrentPosition=mActivity.getSpinnerPosition();/Assertthatthecurrentpositionisthe/sameasthestartingpositionassertEquals(TEST_STATE_DESTROY_POSITION,currentPosition);其中關(guān)鍵的一個方法是getActivity(),只有調(diào)用getActivity()后被測試的activity才會啟動。此外InstrumentationAPI允許把測試項目和被
19、測試的應(yīng)用項目運行到同一個進程中,從而在測試代碼中可以直接調(diào)用被測試應(yīng)用的方法和訪問其成員。Testcase相關(guān)類Android提供了多個由Testcase或Assert派生而來的子類以支持Android平臺相關(guān)的setup,teardown和其它輔助方法。AndroidTestCase為一Android平臺下通用的測試類,它支持所有JUnit的Assert方法和標準的setUp和tearDown方法,并可以用來測試Androidpermission組件相關(guān)的測t類如測試activity,Contentprovider,Service相關(guān)的測試類,Android沒有提供單獨白用來測試Broad
20、castReceiver的測試類,而是可以通過發(fā)送Intent對象來檢測BroadcastReceiver的反應(yīng)結(jié)果來測試BroadcastReceiver。ApplicationTestCase可以用來測試Application對象。InstrumentationTestCase如果你要使用InstrumentationAPI,那么你必須使用InstrumentationTestCase或其子類。AssertionclassesAndroid測試中可以使用JUnit中提供的Assert方法來顯示測試結(jié)果。除此之外,TestingAPI還提供了MoreAsserts和ViewAsserts類。
21、其中MoreAsserts支持更多的比較方法包括RegEx(正則)比較等。ViewAsserts可以用來校驗UIView。Mockobjectclassesandroid.test.mock包中定義一些測試"樁"類,如MockApplication,MockContentProvider,MockContext,MockCursor,MockPackagManager等用例幫助測試。后面將具體介紹如何使用這些API來編寫測試用例。Android測試教程(5):第一個測試項目HelloWorldTest本例介紹創(chuàng)建一個測試項目的一般步驟和編寫測試用例的基本方法。為簡單起見,創(chuàng)
22、建一個HelloWorld應(yīng)用,帶有一個Greeting類,其定義如下:publicclassGreetingprivateStringname;publicGreeting(Stringname)=name;publicStringgetGreetings()return"Hello,"+name;測試項目打算來測試這個Greeting類的getGreetings的方法,比如說,創(chuàng)建Greeting("World"),預(yù)期的getGreetings的值應(yīng)為"Hello,World"。我們可以使用JUnit框架來編寫
23、一個測試用例。這里我們在創(chuàng)建HelloWorld的項目的同時創(chuàng)建一個測試項目,參見Android測試教程(3):測試項目HeiloWorldJ®5TC由com.pstreets.demori|7|Greeting.java©Greetingorame3Greetin虱StringqgetGreeitingeO;.1.rinj.UMeItoWorIdjava.©HelioWorldagreetingcriCreatetBLindh:cidt>孰genGeneratedJavaFilesbMAndroid1.6assetsAndroidMarrifel.xmId
24、efault,propertiespreguard.cfgk-H&NoWorldTet»西5rleV津genGeneratedJavaFilesAndroidL6assetsAndroidMarrif&5ticmI國default,propettierprcguard.cfg可以看到新創(chuàng)建的測試項目名稱為HelloWorldTest,并在src中創(chuàng)建了com.pstreets.demo.test文件夾(和HelloWorld應(yīng)用的com.pstreets.demo包相對應(yīng))。但src還沒有任何代碼??梢钥吹紿elloWorldTest屬性的JavaBuildPath-
25、>Projects中引用的Project為HelloWorld,表示在HelloWorldTest項目中可以引用HelloWorld項目中的類。然后在HelloWorldTest的src的com.pstreets.demo.test中添加一個AllTests.java,其定義如下:publicclassAllTestsextendsTestSuitepublicstaticTestsuite()returnnewTestSuiteBuilder(AllTests.class).includeAllPackagesUnderHere().build();AllTests.java般可以不用
26、修改的應(yīng)用到大部分的測試項目中,如果有特殊需要,可以使用android.test.suitebuilder的類定義那些Testcase需要包含到最終的測試包(TestSuite)中.定義了AllTests.java,這個測試項目就基本完整了,也可以運行了,只是還沒有定義任何測試用例(Testcase)。這里定義一個GreetingTest,用于測試Greeting類:publicclassGreetingTestextendsTestCaseGreetinggreeting;OverridepublicvoidsetUp()greeting=newGreeting("World&qu
27、ot;);)OverridepublicvoidtearDown()publicvoidtestGetGreeting()assertTrue(greeting.getGreetings().compareToIgnoreCase("Hello,World")=0);)其實對于與這個例子setUp和tearDown不是必須的,如果多個TestCase使用同一組測試數(shù)據(jù),可以在setUp中創(chuàng)建這些測試數(shù)據(jù),JUnit中運行每個TestCase前會運行setUp,運行TestCase后會執(zhí)行tearDown。JUnit把以test開頭的方法作為一個實例,也可以使用annotat
28、ionTest表示一個方法為測試方法。GreetingTest由TestCase派生,因為這里測試是一個普通Java類(和Android平臺無關(guān)),也可以使用AndroidTestCase作為基類。testGetGreeting使用assertTrue來檢測測試結(jié)果,預(yù)期的getGreetings()的值為"Hello,World”,如果為true,表示測試通過。以AndroidJUintTest的方式運行HelloWorldTestRunAs。白bugAsValidateTeamCompareWithRestore-fromLd匚口IHistory-.4一.T_I->Ll_4
29、JavaApplicationAlt-bShift+X,JJl5JUnitTestR.urrCcnfigurations.,.AltfShift-bXT運彳亍HelloWorldTest時,Android測試環(huán)境會自動啟動HelloWorld,并在JUint窗口顯示最終測試結(jié)果。在開發(fā)應(yīng)用過程中,可以一邊編寫應(yīng)用,一邊編寫測試用例。Android測試教程(6):測試ActivityActivity的測試非常依賴于Android的Instrumation框架,和Android其他組件不同的是,Activity具有復雜的生命周期回調(diào)函數(shù)(如onCreate,onStart等),通常情況下除通過In
30、strumation接口外不能直接調(diào)用這些回調(diào)函數(shù)。 測試Activity的基本測試類為InstrumentationTestCase,它提供了Instrumentation接口給TestCase的子類。為了支持Activity測試,InstrumentationTestCase提供了下面功能: 生命周期控制:使用Instrumentation,你可以啟動,暫停,中止被測試的ActivityDependencyInjection:Instrumentation允許創(chuàng)建一些Mock對象如Context,Application來幫助測試Activity,從而幫助你控制測試環(huán)境并和實際的應(yīng)用的其他部
31、分隔離開來。你也可以定制一些Intent以啟動Activity。 用戶界面交互:你可以使用Instrumentation向UI發(fā)送按鍵和觸摸事件。下面幾個為主要的用于測試Activity由TestCase派生而來的測試類: ActivityInstrumentationTestCase2通常用于多個Activity的功能測試,它使用正常的系統(tǒng)框架來運行Activity(使用應(yīng)用程序本身),并使用正常系統(tǒng)Context(非Mock)來測試Activity的功能。允許你創(chuàng)建一些MockIntent用來測試Activity的響應(yīng)。要注意的是,這種TestCase不允許使用Mock的Context和A
32、pplication對象測試,也就是說你必須使用和應(yīng)用程序?qū)嶋H運行的環(huán)境來測試。 ActivityUnitTestCase通常用來測試單獨Activity。在啟動被測試的Activity之前,你可以Inject一個假的Context或是Application,使用這個Mock的Context中一個隔離環(huán)境中運行被測試的Activity。通常用于Activity的單元測試,而不和Anroid系統(tǒng)進行交互。 SingleLaunchActivityTestCase用于測試單個Activity,和ActivityUnitTestCase不同的是,它只運行setUp和tearDown一次,而不是在運行
33、testCase中每個TestMethod前后運行setup和tearDown,它可以保證運行多個測試之間fixture不會被重置,從而可以用來測試一些有關(guān)聯(lián)的方法。本篇和后面幾篇介紹Activity,Service,ContentProvider測試的基本概念和相關(guān)類,之后則結(jié)合ApiDemo->Tests為例具體介紹這些類的用法。Android測試教程(7):測試ContentProviderContentProvider為不同的應(yīng)用訪問數(shù)據(jù)提供了統(tǒng)一的接口,本篇介紹Android測試包中用于測試ContentProvider的相關(guān)知識。Android測試包中用于測試ContentP
34、rovider的基本類為ProviderTestCase2,允許你在一個隔離環(huán)境下來測試ContentProvider。并提供了一些Mock類如IsolatedContext,MockContentResover來輔助測試。和其它測試一樣,對于ContentProvider測試也是通過InstrumentationTestRunner來進行的。編譯測試代碼的一般方法是通過派生ProviderTestCase2(為AndroidTestCase的子類),因此可以使用JUnit和Android平臺相關(guān)的方法來測試ContentProvider。可以參見后面的實例來了解如何測試ContentProv
35、ider。Android測試教程(8):測試ServiceAndroid測試框架也提供對Service測試的支持,基本類為ServiceTestCase,因為Service類通常假定和它是和Client是分開使用的,因此你可以無需使用Instrumentation來測試Service。當你設(shè)計一個Service時,你應(yīng)該考慮測試用例中如何檢查Service的當前狀態(tài),比如你在onCreate,onStartCommand中啟動一個Service,一般沒有一個全局變量來表示Service是否成功,你可能需要自己定義一個全局變量用于測試用例中。ServiceTestCase中提供getServic
36、e()可以取得當前被測試的Service對象。ServiceTestCase為AndroidTestCase的子類,因此可以測試和Permission相關(guān)的功能,并提供Mock的Application和Context對象為測試Service提供了一個隔離的測試環(huán)境。Android測試教程(9):ApplicationTestCase示例前面介紹了Android測試的一些理論知識,從本篇開始的幾篇將結(jié)合ApiDemoTest示例來介紹Android測試的實例。在此之前可以參照Android測試教程(3):測試項目創(chuàng)建ApiDemos->tests測試項目,本項目測試用來測試ApiDemos
37、,主要目的是介紹Android測試框架的使用方法。當然要測試ApiDemos,事先要創(chuàng)建好項目ApiDemos。下圖顯示了創(chuàng)建好ApiDemos->Tests后,ApiDemos->Tests中所含的Java類:任ApiOemos/士ccm_exannple_android_apis_tfrsts三Android2.2/3“七,舟匚口小庫*號mpk1用ndqidgpi導J|AllTests.java|_JApiDemosApplicationTe.javal|ApIDemo5Testjava* ,jjccm.ej(ample.dnclroid,apis,app|J|Forwardi
38、ngTe?t.java.JLocalService!Mtjava* 70r二onn,碎xompl號用ndq汨聞.MorseCodeCoriverterTestjava* :cam.examplendroidrjpiview|JFocus?Activity7est.java7iFocu52AndroidTestjavagenGe"eraitc.a1;a-liesassetsresA.ndroidMarrife5t.xmIbufldpropertitndefaultpropertiesAndroid測試項目也是一個Android應(yīng)用項目,其基本使用方法和開發(fā)一般的Android應(yīng)用非常類
39、似,Android測試項目主要是利用Android測試框架編寫測試用例來測試對應(yīng)的Android應(yīng)用的各個方面。其中AllTests.java定義如下:publicclassAllTestsextendsTestSuitepublicstaticTestsuite()returnnewTestSuiteBuilder(AllTests.class).includeAllPackagesUnderHere().build();使用TestSuiteBuilder指明所有該包和其子包中定義的TestCase都為最終TestSuite的一部分(需要被運行的測試)。AllTests.java一般可以不
40、用修改的應(yīng)用到大部分的測試項目中,如果有特殊需要,可以使用android.test.suitebuilder的類定義那些Testcase需要包含到最終的測試包(TestSuite)中.ApiDemosApplicationTests測試介紹ApplicationTestCase的基本使用方法。下圖為ApplicationTestCase的繼承關(guān)系:舊日忸/口口自阻LjunrLfra色w/uricT曰stCase間巾-叱由與An由加儂©£(Landroid.test.Applies!ionTestCaE&=Textends-nUmid口皿ApubcaflonAppli
41、cationTestCase主要用來測試Application類,提供了對Application類生命周期方法的基本支持,并可以支持一些dependencyinjection以幫助構(gòu)造測試Application的的環(huán)境。ApplicationLifecycle支持,每個Application運行都遵循一定的順序(生命周期方法),ApplicationTestCase提供下面方法來支持對Application生命周期方法的測試:只有當測試用例調(diào)用createApplication()后才會執(zhí)行Application的onCreate方法,從而使得你有機會在調(diào)用Application的onCrea
42、te方法之前對測試框架做些調(diào)整。當測試用例結(jié)束時,測試用例的tearDown方法會被調(diào)用,然后會調(diào)用Application的onDestroy()方法停止和銷毀Application.DependencyInjection每個Application都依賴于運行它的Context對象,Android測試框架允許你注入一個Mock的或者孤立的context對象,以實現(xiàn)真正的單元測試,如果只是想做一般的測試,你的Application方法將被注入全功能的Context對象,你可以使用setContext來注入你定義的Mock的Context對象,setContext必須在createApplicat
43、ion之前調(diào)用。測試框架提供了如MockContext,RenamingDelegatingContext,ContextWrapper來幫助你構(gòu)造用于測試Applicaton的Context對象。本例的代碼如下:publicclassApiDemosApplicationTestsextendsApplicationTestCase<ApiDemosApplication>publicApiDemosApplicationTests()super(ApiDemosApplication.class);OverrideprotectedvoidsetUp()throwsExcept
44、ionsuper.setUp();SmallTestpublicvoidtestPreconditions()*Testbasicstartup/shutdownofApplication*/MediumTestpublicvoidtestSimpleCreate()createApplication();有幾個新知識1. SmallTestMediumTest:Android測試框架可以使用SmallTest,MediumTest和LargeTest來標注測試方法,這些分類劃分主要是根據(jù)測試訪問數(shù)據(jù)的位置,如本地,SD卡,網(wǎng)絡(luò),下表為通常劃分測試等級的基本方法:FeatureSmallMed
45、iumLargeNetworkaccessNolocalhostonlyYesDatabaseNoYesYesFilesystemaccessNoYesYesUseexternalsystemsNoDiscouragedYesMultiplethreadsNoYesYesSleepstatementsNoYesYesSystempropertiesNoYesYesTimelimit(seconds)60300900+2. testPreconditionstestPreconditions測試主要用來運行其它測試方法之前來校驗Application對象的初始化情況,和setUp類似,但和set
46、Up不同的是,testPreconditions只會被運行一次,而setUp通常在執(zhí)行每個測試方法之前都會運行一次,一般需把它做為Application第一個測試方法,但由于JUnit使用Reflection來取得測試方法,因此并不一定能保證testPreconditions一定在其它測試方法之前運行。testSimpleCreate為測試Application的測試方法,調(diào)用createApplication會觸發(fā)Application的onCreate方法,測試結(jié)束后,執(zhí)行tearDown,然后調(diào)用Application的onDestroy方法,如果Application的onCreate
47、,onDestroy運行拋出異常的話,則本測試方法失敗,否則表示測試通過。ApplicationTestCase還提供了一個terminateApplication中止Application,可以測試Application的onTerminate方法。Android測試教程(10):ActivityInstrumentationTestCase2示例ActivityInstrumentationTestCase2主要用來測試一個或多個Activity的功能測試,使用和最終應(yīng)用同樣的運行環(huán)境來測試Activity的功能??梢允褂谜O到y(tǒng)Context(非Mock)來測試Activity的功能。并
48、允許你創(chuàng)建一些MockIntent用來測試Activity的響應(yīng)。要注意的是,這種TestCase不允許使用Mock的Context和Application對象測試,也就是說你必須使用和應(yīng)用程序?qū)嶋H運行的環(huán)境來測試。ActivityInstrumentationTestCase2的繼承關(guān)系如下圖所示:Ljunit,fi一meworkAssartLiunHfmm-waflcTLanWoicnestInstrum而。:舊訂席teaseL自門droid-10tAjctr-tyT自客自Landroid.tesLAcljityinsfrumentalionTestGase2<Textends-由由
49、立白口仇仙忖I它的getActivity()方法可以取得被測試的Activity的實例對象。publicclassApiDemosTestextendsActivityInstrumentationTestCase2<ApiDemos>publicApiDemosTest()super(ApiDemos.class);publicvoidtestActivityTestCaseSetUpProperly()assertNotNull("activityshouldbelaunchedsuccessfully",getActivity();測試方法testActi
50、vityTestCaseSetUpProperly使用getActivity(),主要目的是測試本測試的Activity能否正常啟動,測試getActivity()是否非空。此外ActivityInstrumentationTestCase2還提供了兩個方法:setActivityInitialTouchMode(boolean)在啟動Activity之前設(shè)置TouchModesetActivityIntent(Intent)可以設(shè)置啟動Activity的Intent對象來測試ActivityAndroid測試教程(11):ActivityUnitTestCase示例ActivityUnitT
51、estCase通常用來測試單獨Activity。在啟動被測試的Activity之前,你可以Inject一個假的Context或是Application,使用這個Mock的Context中一個隔離環(huán)境中運行被測試的Activity。通常用于Activity的單元測試,而不和Anroid系統(tǒng)進行交互。ActivityUnitTestCase的類繼承關(guān)系如下圖:舊回mno口口回通仃日meworkAssertLiunitTpstCa5HkdTidRjmerrtationT白tC3津eUaEed加stAcbyitvTestCasHLandroidtestActurrtyUnitTestCas&=
52、:remends+唧加"應(yīng)該要注意的是,作為單純的單元測試,被測試的Activity不運行在一般應(yīng)用運行的環(huán)境中也不和其它Activity產(chǎn)生交互。在這種情況下,不能調(diào)用下面的方法,如果調(diào)用一般會拋出異常:createPendingResult(int,Intent,int)startActivityIfNeeded(Intent,int)startActivityFromChild(Activity,Intent,int)startNextMatchingActivity(Intent)getCallingActivity()getCallingPackage()createPen
53、dingResult(int,Intent,int)getTaskId()isTaskRoot()moveTaskToBack(boolean)下面的方法可以調(diào)用,但一般不起任何作用,你可以使用getStartedActivityIntent()和getStartedActivityRequest()來檢查參數(shù)值。startActivity(Intent)startActivityForResult(Intent,int)isFinishCalled()下面的方法也可以調(diào)用,一般也無效果,可以使用getFinishedActivityRequest檢查傳入的參數(shù)。finish()finishF
54、romChild(Activity)finishActivity(int)ForwardingTest的代碼如下:publicclassForwardingTestextendsActivityUnitTestCase<Forwarding>privateIntentmStartIntent;privateButtonmButton;publicForwardingTest()super(Forwarding.class);OverrideprotectedvoidsetUp()throwsExceptionsuper.setUp();mStartIntent=newIntent(
55、Intent.ACTION_MAIN);MediumTestpublicvoidtestPreconditions()startActivity(mStartIntent,null,null);mButton=(Button)getActivity().findViewById(R.id.go);assertNotNull(getActivity();assertNotNull(mButton);MediumTestpublicvoidtestSubLaunch()Forwardingactivity=startActivity(mStartIntent,null,null);mButton=
56、(Button)activity.findViewById(R.id.go);mButton.performClick();assertNotNull(getStartedActivityIntent();assertTrue(isFinishCalled();MediumTestpublicvoidtestLifeCycleCreate()Forwardingactivity=startActivity(mStartIntent,null,null);getInstrumentation().callActivityOnStart(activity);getInstrumentation().callActivityOnResume(activity);getInstrumentation().callActivityOnPause(activity);getInstrumentation().callActivityOnStop(activity);在setUp中,創(chuàng)建了一個MockIntent對象mStartIntent用于測試Activity。按慣例測試方法testPrecondi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 獨立董事2025年度履職評價與激勵措施合同3篇
- 二零二五年度禾青幼兒園教玩具采購與幼兒園設(shè)施維護合同3篇
- 二零二五搬家公司合同模板:搬家保險責任與賠償條款2篇
- 二零二五版物流行業(yè)預(yù)付款擔保合同2篇
- 二零二五版搬家服務(wù)與家政服務(wù)融合合同樣本2篇
- 二零二五年度蔬菜電子商務(wù)合同:線上銷售平臺與賣家之間的規(guī)則2篇
- 二零二五版汽車零部件購銷合同標準及售后服務(wù)模板3篇
- 二零二五年度國際教育機構(gòu)合作辦學合同3篇
- 二零二五年度高壓變壓器安裝及安全防護技術(shù)合同3篇
- 二零二五版社保繳納與工傷保險待遇保障合同3篇
- ICU常見藥物課件
- CNAS實驗室評審不符合項整改報告
- 農(nóng)民工考勤表(模板)
- 承臺混凝土施工技術(shù)交底
- 臥床患者更換床單-軸線翻身
- 計量基礎(chǔ)知識培訓教材201309
- 中考英語 短文填詞、選詞填空練習
- 一汽集團及各合資公司組織架構(gòu)
- 阿特拉斯基本擰緊技術(shù)ppt課件
- 初一至初三數(shù)學全部知識點
- 新課程理念下的班主任工作藝術(shù)
評論
0/150
提交評論