Github下載測(cè)試源碼
在這個(gè)codelab中,你將學(xué)習(xí)如何在Android Studio中配置工程用于測(cè)試,在開(kāi)發(fā)機(jī)器上編寫(xiě)并運(yùn)行單元測(cè)試,以及如何在手機(jī)上做功能UI測(cè)試。
你會(huì)學(xué)到什么
更新包含JUnit和Android Testing Support Library的Gradle構(gòu)建文件 編寫(xiě)運(yùn)行在本機(jī)Java虛擬機(jī)上的單元測(cè)試 編寫(xiě)運(yùn)行在手機(jī)或者虛擬機(jī)上的Espresso測(cè)試你需要什么
Android Studiov1.2+ Android 4.0+的測(cè)試設(shè)備 2.創(chuàng)建新的Android Studio工程如果是第一次啟動(dòng)Android Studio,從歡迎頁(yè)選擇“Start a new Android Studio project”。如果已經(jīng)打開(kāi)了一個(gè)工程,選擇File>New>New Project...
“Create new project”向?qū)?huì)指導(dǎo)整個(gè)過(guò)程,在第一頁(yè)輸入如下內(nèi)容:
Setting Value Application NameTestingExample Company demaintesting.example.com這樣會(huì)保證你的代碼同codelab講解的內(nèi)容具有一致的命名。其他的選項(xiàng)都設(shè)置為默認(rèn),一路點(diǎn)擊Next直到工程創(chuàng)建完畢。
點(diǎn)擊Run按鈕檢查app是否運(yùn)行正常,要么從模擬器列表中選擇一個(gè)啟動(dòng),要么確認(rèn)開(kāi)啟了debug模式的設(shè)備通過(guò)USB同電腦正確連接。
app目前沒(méi)有做任何事情,但是屏幕上應(yīng)該顯示“Hello world!”和app的名字。
經(jīng)常被問(wèn)及的問(wèn)題
如何安裝Android Studio? 如何開(kāi)啟USB調(diào)試? 為什么Android Studio找不到我的設(shè)備? Android錯(cuò)誤:無(wú)法將*.apk安裝到設(shè)備上:超時(shí)? 3.配置支持單元測(cè)試的工程在寫(xiě)測(cè)試之前,讓我們做下簡(jiǎn)單的檢查,確保工程配置正確。
首先,確認(rèn)在Build Variants窗口內(nèi)的Test Artifact中選擇了"Unit Tests"。
然后,在工程的src文件夾內(nèi)創(chuàng)建test和test/java文件夾。需要注意的是,你不能在Android視圖下進(jìn)行這些操作,要么在系統(tǒng)的文件管理器內(nèi)創(chuàng)建,要么在工程窗口左上方點(diǎn)擊下拉菜單選擇Project視圖。最終的工程結(jié)構(gòu)應(yīng)該是這樣的:
(在codelab的剩余部分,你可以返回繼續(xù)使用Android工程視圖)
最后,打開(kāi)工程的build.gradle(Module:app)文件,添加JUnit4依賴,點(diǎn)擊Gradle sync按鈕。
build.gradle
dependencies { compile fileTree(dir: \'libs\', include: [\'*.jar\']) compile \'com.android.support:appcompat-v7:22.1.1\' testCompile \'junit:junit:4.12\' }
當(dāng)你同步Gradle配置時(shí),可能需要聯(lián)網(wǎng)下載JUnit依賴。
4.創(chuàng)建第一個(gè)單元測(cè)試現(xiàn)在,萬(wàn)事俱備,讓我們開(kāi)始寫(xiě)第一個(gè)測(cè)試吧。首先,創(chuàng)建一個(gè)非常簡(jiǎn)單的被測(cè)類:Calculator類。
然后,向類中添加一些基本的算術(shù)運(yùn)算方法,比如加法和減法。將下列代碼復(fù)制到編輯器中。不用擔(dān)心實(shí)際的實(shí)現(xiàn),暫時(shí)讓所有的方法返回0。
Calculator.java
package com.example.testing.testingexample; public class Calculator { public double sum(double a, double b){ return 0; } public double substract(double a, double b){ return 0; } public double divide(double a, double b){ return 0; } public double multiply(double a, double b){ return 0; } }
Android Studio提供了一個(gè)快速創(chuàng)建測(cè)試類的方法。只需在編輯器內(nèi)右鍵點(diǎn)擊Calculator類的聲明,選擇Go to > Test,然后"Create a new test…"
在打開(kāi)的對(duì)話窗口中,選擇JUnit4和"setUp/@Before",同時(shí)為所有的計(jì)算器運(yùn)算生成測(cè)試方法。
這樣,就會(huì)在正確的文件夾內(nèi)(app/src/test/java/com/example/testing/testingexample)生成測(cè)試類框架,在框架內(nèi)填入測(cè)試方法即可。下面是一個(gè)示例:
Calculator.java
package com.example.testing.testingexample; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; public class CalculatorTest { private Calculator mCalculator; @Before public void setUp() throws Exception { mCalculator = new Calculator(); } @Test public void testSum() throws Exception { //expected: 6, sum of 1 and 5 assertEquals(6d, mCalculator.sum(1d, 5d), 0); } @Test public void testSubstract() throws Exception { assertEquals(1d, mCalculator.substract(5d, 4d), 0); } @Test public void testDivide() throws Exception { assertEquals(4d, mCalculator.divide(20d, 5d), 0); } @Test public void testMultiply() throws Exception { assertEquals(10d, mCalculator.multiply(2d, 5d), 0); } }
請(qǐng)將代碼復(fù)制到編輯器或者使用JUnit框架提供的斷言來(lái)編寫(xiě)自己的測(cè)試。
5.運(yùn)行單元測(cè)試終于到運(yùn)行測(cè)試的時(shí)候了!右鍵點(diǎn)擊CalculatorTest類,選擇Run > CalculatorTest。也可以通過(guò)命令行運(yùn)行測(cè)試,在工程目錄內(nèi)輸入:
./gradlew test
無(wú)論如何運(yùn)行測(cè)試,都應(yīng)該看到輸出顯示4個(gè)測(cè)試都失敗了。這是預(yù)期的結(jié)果,因?yàn)槲覀冞€沒(méi)有實(shí)現(xiàn)運(yùn)算操作。
讓我們修改Calculator類中的sum(double a, double b)方法返回一個(gè)正確的結(jié)果,重新運(yùn)行測(cè)試。你應(yīng)該看到4個(gè)測(cè)試中的3個(gè)失敗了。
Calculator.java
public double sum(double a, double b){ return a + b; }
作為練習(xí),你可以實(shí)現(xiàn)剩余的方法使所有的測(cè)試通過(guò)。
可能你已經(jīng)注意到了Android Studio從來(lái)沒(méi)有讓你連接設(shè)備或者啟動(dòng)模擬器來(lái)運(yùn)行測(cè)試。那是因?yàn)?,位于src/tests目錄下的測(cè)試是運(yùn)行在本地電腦Java虛擬機(jī)上的單元測(cè)試。編寫(xiě)測(cè)試,實(shí)現(xiàn)功能使測(cè)試通過(guò),然后再添加更多的測(cè)試...這種工作方式使快速迭代成為可能,我們稱之為測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。
值得注意的是,當(dāng)在本地運(yùn)行測(cè)試時(shí),Gradle為你在環(huán)境變量中提供了包含Android框架的android.jar包。但是它們功能不完整(所以,打個(gè)比方,你不能單純調(diào)用Activity的方法并指望它們生效)。推薦使用Mockito等mocking框架來(lái)mock你需要使用的任何Android方法。對(duì)于運(yùn)行在設(shè)備上,并充分利用Android框架的測(cè)試,請(qǐng)繼續(xù)閱讀本篇教程的下個(gè)部分。
雖然在Android框架內(nèi)支持運(yùn)行instrumentation測(cè)試,但是目前開(kāi)發(fā)重心主要集中在剛剛發(fā)布的作為Android Testing Support Library一部分的新的AndroidJUnitRunner。測(cè)試庫(kù)包含Espresso,用于運(yùn)行功能UI測(cè)試的框架。讓我們通過(guò)編輯build.gradle的相關(guān)部分來(lái)把它們添加進(jìn)我們的工程。
build.gradle
apply plugin: \'com.android.application\' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.example.testing.testingexample" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" //ADD THIS LINE: testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(\'proguard-android.txt\'), \'proguard-rules.pro\' } } //ADD THESE LINES: packagingOptions { exclude \'LICENSE.txt\' } } dependencies { compile fileTree(dir: \'libs\', include: [\'*.jar\']) compile \'com.android.support:appcompat-v7:22.0.0\' //← MAKE SURE IT’S 22.0.0 testCompile \'junit:junit:4.12\' //ADD THESE LINES: androidTestCompile \'com.android.support.test:runner:0.2\' androidTestCompile \'com.android.support.test:rules:0.2\' androidTestCompile \'com.android.support.test.espresso:espresso-core:2.1\' }
重要:由于一些依賴版本沖突,你需要確認(rèn)com.android.support:appcompat-v7庫(kù)的版本號(hào)是22.0.0,像上面的代碼片段一樣。
另外,Android Studio可能會(huì)提醒你Build Tools 22.0.1沒(méi)有安裝。你應(yīng)該接受修復(fù)建議,Studio會(huì)為你安裝Build Tools或者在build.gradle中把這行修改成已經(jīng)安裝在你電腦的版本。
上面的工作完成后,在Build Variants窗口內(nèi)切換成Android Instrumentation Tests,你的工程應(yīng)該自動(dòng)同步。如果沒(méi)有,點(diǎn)擊Gradle sync按鈕。
7.為app添加簡(jiǎn)單的交互在使用Espresso進(jìn)行UI測(cè)試前,讓我們?yōu)閍pp添加一些Views和簡(jiǎn)單的交互。我們使用一個(gè)用戶可以輸入名字的EditText,歡迎用戶的Button和用于輸出的TextView。打開(kāi)res/layout/activity_main.xml,粘貼如下代碼:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:hint="Enter your name here" android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Say hello!" android:layout_below="@+id/editText" android:onClick="sayHello"/> </RelativeLayout>
還需要在MainActivity.java中添加onClick handler:
MainActivity.java
public void sayHello(View v){ TextView textView = (TextView) findViewById(R.id.textView); EditText editText = (EditText) findViewById(R.id.editText); textView.setText("Hello, " + editText.getText().toString() + "!"); }
現(xiàn)在可以運(yùn)行app并確認(rèn)一切工作正常。在點(diǎn)擊Run按鈕之前,確認(rèn)你的Run Configuration沒(méi)有設(shè)置為運(yùn)行測(cè)試。如需更改,點(diǎn)擊下拉選項(xiàng),選擇app。
8.創(chuàng)建并運(yùn)行Espresso測(cè)試在工程的整體視圖上,找到以(androidTest)后綴結(jié)尾的包名并創(chuàng)建一個(gè)新的Java類??梢詫⑺麨镸ainActivityInstrumentationTest,將如下代碼粘貼過(guò)去。
** MainActivityInstrumentationTest.java
package com.example.testing.testingexample; import android.support.test.InstrumentationRegistry; import android.support.test.espresso.action.ViewActions; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.LargeTest; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard; import static android.support.test.espresso.action.ViewActions.typeText; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; @RunWith(AndroidJUnit4.class) @LargeTest public class MainActivityInstrumentationTest { private static final String STRING_TO_BE_TYPED = "Peter"; @Rule public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>( MainActivity.class); @Test public void sayHello(){ onView(withId(R.id.editText)).perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard()); //line 1 onView(withText("Say hello!")).perform(click()); //line 2 String expectedText = "Hello, " + STRING_TO_BE_TYPED + "!"; onView(withId(R.id.textView)).check(matches(withText(expectedText))); //line 3 } }
測(cè)試類通過(guò)AndroidJUnitRunner運(yùn)行,并執(zhí)行sayHello()方法。下面將逐行解釋都做了什么:
1.首先,找到ID為editText的view,輸入Peter,然后關(guān)閉鍵盤(pán); 2.接下來(lái),點(diǎn)擊Say hello!的View,我們沒(méi)有在布局的XML中為這個(gè)Button設(shè)置id,因此,通過(guò)搜索它上面的文字來(lái)找到它; 3.最后,將TextView上的文本同預(yù)期結(jié)果對(duì)比,如果一致則測(cè)試通過(guò);你也可以右鍵點(diǎn)擊域名運(yùn)行測(cè)試,選擇Run>MainActivityInstrume...(第二個(gè)帶Android圖標(biāo)的)
這樣就會(huì)在模擬器或者連接的設(shè)備上運(yùn)行測(cè)試,你可以在手機(jī)屏幕上看到被執(zhí)行的動(dòng)作(比如在EditText上打字)。最后會(huì)在Android Studio輸出通過(guò)和失敗的測(cè)試結(jié)果。
Github下載測(cè)試源碼
9.祝賀我們希望你能喜歡本篇教程,并且開(kāi)始著手測(cè)試你的應(yīng)用程序。接著你可以學(xué)習(xí)如下內(nèi)容:
了解更多關(guān)于單元測(cè)試和instrumentation測(cè)試的區(qū)別; 了解更多關(guān)于設(shè)置Android Testing Support Library;觀看下面非常棒的有關(guān)Android Studio的視頻:
Introduction to Android Studio Introducing Gradle (Ep 2, Android Studio) Layout Editor (Ep 3, Android Studio) Debugging and testing in Android Studio (Ep 4, Android Studio) 在Github下載Google測(cè)試示例代碼(完)
當(dāng)前文章:android單元測(cè)試
文章地址:http://sd-ha.com/article44/cgsphe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站改版、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、動(dòng)態(tài)網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)