1. 程式人生 > >Android studio中單元測試和UI測試

Android studio中單元測試和UI測試

1.預覽(Over view):

在這篇文章裡頭呢,你可以學到如何在Android studio中建立一個測試專案,編寫測試單元跑在你的開發機器上,並且用真機進行介面測試。

那你會學到什麼呢?

  • 升級Gradle讓它支援單元測試和測試依賴庫
  • 編寫在Java虛擬機器上跑的單元測試
  • 編寫Espresso測試,讓它跑在真機或者模擬器上

我們需要什麼環境呢?

Android studio 版本1.2以上

測試裝置的版本要4.0以上

2.在android studio 中建立一個新的android 應用

如果你是第一次開啟Android studio,那麼就可以點選歡迎介面上的:Start  a new Android Studio project

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-11-34-33

把名字和域名填寫上,然後就可以點選next進行下一步操作:

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-11-36-39

那麼接下來呢,一直保持預設的設定即可,直接可以一路next下去就好了。

建立完成之後呢,你可以點選執行的按鈕把程式跑起來,就會出現hello world的介面了

到這裡的話,說明你建立一個Android studio 專案成功了!來,給自己一點掌聲吧!

3.配置你的專案可以支援單元測試

原文的話,沒什麼好看的。因為在現在的Android studio裡頭,當你建立專案的時候 ,會自動地給你新增測試依賴的,不需要手動新增。

所以,只要看看Gradle裡頭有依賴,並且資料夾有三個嘛,一個是普通的程式碼資料夾,一個JVM裡頭的測試的,一個是真機或者模擬器的測試資料夾:

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-12-01-30

4.建立你的第一個單元測試

環境一般都是有已經配置好的,我們直接建立測試單元即可。在測試之前,我們是不是要有東西測試呀,那麼我們先要建立一個用於測試的類:

package com.sunofbeaches.testtingexample;

/**
 * Created by trillgates on 16/12/15.
 */
public class Caculation {

    public double sum(double numA, double numB) {
        return numA + numB;
    }

    public double multiply
(double numA, double numB)
{ return numA * numB; } }

這個類呢,很簡單,只有兩個方法。一個是做加法運算,一個做乘法運算。我們直接右鍵,如圖所示:

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-12-26-53

點選建立就可以啦,然後你選擇有Unit測試那個資料夾,也就是跑在JVM上測試的那個,就會在那裡建立的了。

package com.sunofbeaches.testtingexample;

import org.junit.Before;
import org.junit.Test;

import static junit.framework.Assert.assertEquals;

/**
 * Created by trillgates on 16/12/15.
 */
public class CaculationTest {

    private Caculation mCaculation;

    @Before
    public void setUp() throws Exception {
        //Here we should new a instance
        mCaculation = new Caculation();
    }

    @Test
    public void testSum() throws Exception {
        assertEquals(2,mCaculation.sum(1,1),0);
    }

    @Test
    public void testMultiply() throws Exception {
        assertEquals(10,mCaculation.multiply(2,5),0);
    }
}

程式碼很簡單,僅僅是幾個方法而已。在之前的話,需要建立物件嘛,這個可以理解吧,所以先建立一個物件,後面的就用斷言的方式來測試即可。

5.把你的測試專案跑起來

編寫好測試程式碼之後,怎麼樣才能跑起來呢,這個也很簡單哈,小手一抖,對吧,就可以了!

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-12-34-21

點選注可以跑起來啦,結果如下:如果是綠條哈,那麼說明測試通過,紅色,則是程式碼邏輯有總是,輸入得到的結果不是你所斷言的,所以邏輯有總是了。

6.配置你的專案進行真機測試

原文的配置如下,有些要注意的地方請看後面的說明:

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'
}

這是我的程式碼:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"

    defaultConfig {
        applicationId "com.sunofbeaches.testtingexample"
        minSdkVersion 15
        targetSdkVersion 25
        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'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.0.0'

    //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'
    androidTestCompile 'com.android.support:support-annotations:25.0.0'
}

這裡的話,大家要靈活地新增到自己的開發工具中了,因為不同的版本可能不一樣。這個要知道哈,注意的地方就是要版本對得上,否則是不能通過編譯的。

7.新增一些簡單的測試指令到你的應用中

接下來呢,就是新增一些簡易的測試指令。先是複製下面的佈局到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:paddingBottom="@dimen/activity_vertical_margin"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello world!"/>

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:hint="Enter your name here"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText"
        android:onClick="sayHello"
        android:text="Say hello!"/>
</RelativeLayout>

它看起來就這個樣子的哈:

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-16-27-32

以下是MainActivity的程式碼:

package com.sunofbeaches.testtingexample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    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() + "!");
    }
}

8.建立並執行一個Espresso(這是一個代號,名稱而已)測試

到這裡的話,我們已經準備好了要測試的內容,於是我們就可以愉快地建立一個測試類了:

package com.sunofbeaches.testtingexample;

/**
 * Created by trillgates on 16/12/15.
 */

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest;

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
    }

}

執行一下,你就會發現,這個應用跑起來,然後會自動地輸入想著的內容,接著就消失了。綠條表示測試通過哈:

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-16-30-00%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-15-16-31-01

相關推薦

Android studio單元測試UI測試

1.預覽(Over view): 在這篇文章裡頭呢,你可以學到如何在Android studio中建立一個測試專案,編寫測試單元跑在你的開發機器上,並且用真機進行介面測試。 那你會學到什麼呢? 升級Gradle讓它支援單元測試和測試依賴庫編寫在Java虛擬機器上跑的單

Android studio 單元測試 UI 測試

這系列文章翻譯自google的程式碼實驗室1.目錄如下:1、在android studio 中建立一個新的android 應用2、配置你的專案可以支援單元測試3、建立你的第一個單元測試4、把你的測試專案跑起來5、配置你的專案進行真機測試6、新增一些簡單的測試指令到你的應用中7

Android Studio單元測試某個類的一個方法

我們在使用Android Studio工具進行開發的時候,有時候會單獨測試一個類中的一個方法,由於去執行整個專案會消耗的時間比較多,我們只想獨立的測試這個方法,那麼我們在AS中應該怎麼做呢?    

Android Studio單元測試@Test的使用

如何將一個普通的函式程式設計單元測試? 只需要簡單的一個@Test註解!!! 就拿公司的智慧雲平臺示例吧! package cn.intelvision; import org.junit.FixMethodOrder; import org.junit.Ignore

Android StudioGradle版本Gradle外掛版本問題

在as中主要是配置gradle和android gradle外掛,注意了gradle和(android gradle外掛)一定不能混為一談,2者是有區別的。 1.gradle的配置 當我們在setting下gradle下設定gradle選擇“use defalut gra

Android Studio的“favorites”“bookmark”

轉自:https://www.cnblogs.com/liaojie970/p/5630651.html做專案難免來回檢視某個檔案的某個方法,某些檔案可能訪問率很高,為了加快開發效率樓主推薦使用favorites (檔案)bookmark (程式碼 行)。favorites 

如何在Android Studio建立jniLibasset資料夾

1.建立asset資料夾 如圖進行操作 2.建立jniLib資料夾 —開啟app下面的gradle檔案(不是project的gradle) —在gradle檔案的Android標籤裡面新增  sourceSets.main.jniLibs.srcDirs

Android StudioGradle版本Gradle外掛版本問題整理

    使用Android Studio時,我們有時候需要檢視Gradle版本,具體如何檢視呢!經過如下幾步操作就可以了。     1.啟動Android Studio,選擇一個專案(Module),開啟該專案,如下所示:       2.專案開啟後,單擊‘File’選單,

Android Studiomipmap目錄drawable目錄有什麼區別

使用Android Studio開發時發現有2個目錄可以放置圖片: mipmap vs drawable,那麼他們有什麼區別呢?該選擇哪個呢? 這裡網羅各位大神的答案,共同學習: 答案1: 圖片還是放

Android Studio進行單元測試

term pack jsb java 測試的 dep create stat multi 在Android開發過程中,我們往往忽略了單元測試功能, 主要還能還是大家覺得 真機在手,運行調試特別直觀。 不過如果我們能夠養成單元測試的習慣,相信能更加提升我們應用開發的速度。

Android Studio進行UI測試

一、build.gradle 中配置 在defaultConfig中新增 testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” 在dependenc

Android產品研發(十九)-->Android studio單元測試

上一篇文章中我們講解了webview中問題集錦,講解了webview的效能優化、webview種入Cookie資訊、activity退出的時候清除webview資訊報錯、如何通過java程式碼和js程式碼相互互動、webview如何下載檔案以及騰訊的X5瀏覽

Android studio執行單元測試報錯: Class Not Found: Empty Test Suite

使用Espresso時報錯 Class not found: “com.test.LoginUnitTest”Empty test suite. 原因:沒有將該測試類新增到InstrumentedTest中 解決: 1.開啟配置,選擇Edit Configurations

Android Studio切換測試多個Activity

.發現可以在as中指定啟動哪個activity,這樣就不需要頻繁的修改AndroidManifest.xml了 步驟如下,在.xml中給activity任意指定一個intent,比如 <activity android:name="com.jjy.dahua.CameraDe

Android Studio測試一段程式碼執行結果

檢測一段很小的程式碼,不一定需要讓整個專案跑起來,可以通過簡單的方式看下寫的效果。 1、 public static void main(String[] args){ //下面寫你要測試的方法,如: String aaa = "aaa"; Str

Android Studio連線真機測試的方法

剛開始學Android Studio,如果用模擬器執行的話,電腦配置不高的話會比較卡,於是可以連線安卓手機進行真機測試。廢話不多說,來看看步驟吧 (1)開啟app下的Edit (2)選擇 USB Device (3)點選OK就行了! 然後就是手機上的配置了 (1)開啟

Android開發單元測試的兩種方式

Android開發中單元測試的兩種方式 一位優秀的程式設計師也同樣不能保證自己的程式沒有bug,因此編寫合適的測試程式是完全有必要的,這樣也會降低程式在後期出現各種奇奇怪怪bug的可能,降低維護成本,未雨綢繆將bug扼殺在搖籃之中。 看到網上有很多依舊用寫java單元測試的

Android Studio 使用真機測試 你還在連線好幾個資料線嗎?

相信做開發的朋友我們在使用AS 開發的時候會使用真機測試,我們有時候會在電腦上連線2個或者3個手機去除錯,就需要三個資料線去連線,今天介紹一個外掛,可以Wi-Fi連線, 一、開啟AS 中的 輸入Android WiFi ADB 點選插入,重啟AS,你會發

Android Studio 進行單元測試完整教程

前言 為了這個AndroidStudio的單元測試,從下午搞到晚上才搞明白咋操作。 我學一個新知識總是那麼坎坷,經歷無數的錯誤路徑,才可能找到正確的路在哪兒。 我的AndroidStudio 我的AndroidStudio是