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
把名字和域名填寫上,然後就可以點選next進行下一步操作:
那麼接下來呢,一直保持預設的設定即可,直接可以一路next下去就好了。
建立完成之後呢,你可以點選執行的按鈕把程式跑起來,就會出現hello world的介面了
到這裡的話,說明你建立一個Android studio 專案成功了!來,給自己一點掌聲吧!
3.配置你的專案可以支援單元測試
原文的話,沒什麼好看的。因為在現在的Android studio裡頭,當你建立專案的時候 ,會自動地給你新增測試依賴的,不需要手動新增。
所以,只要看看Gradle裡頭有依賴,並且資料夾有三個嘛,一個是普通的程式碼資料夾,一個JVM裡頭的測試的,一個是真機或者模擬器的測試資料夾:
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;
}
}
這個類呢,很簡單,只有兩個方法。一個是做加法運算,一個做乘法運算。我們直接右鍵,如圖所示:
點選建立就可以啦,然後你選擇有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.把你的測試專案跑起來
編寫好測試程式碼之後,怎麼樣才能跑起來呢,這個也很簡單哈,小手一抖,對吧,就可以了!
點選注可以跑起來啦,結果如下:如果是綠條哈,那麼說明測試通過,紅色,則是程式碼邏輯有總是,輸入得到的結果不是你所斷言的,所以邏輯有總是了。
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>
它看起來就這個樣子的哈:
以下是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
}
}
執行一下,你就會發現,這個應用跑起來,然後會自動地輸入想著的內容,接著就消失了。綠條表示測試通過哈:
相關推薦
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 Studio中Gradle版本和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中建立jniLib和asset資料夾
1.建立asset資料夾 如圖進行操作 2.建立jniLib資料夾 —開啟app下面的gradle檔案(不是project的gradle) —在gradle檔案的Android標籤裡面新增 sourceSets.main.jniLibs.srcDirs
Android Studio中Gradle版本和Gradle外掛版本問題整理
使用Android Studio時,我們有時候需要檢視Gradle版本,具體如何檢視呢!經過如下幾步操作就可以了。 1.啟動Android Studio,選擇一個專案(Module),開啟該專案,如下所示: 2.專案開啟後,單擊‘File’選單,
Android Studio中mipmap目錄和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中寫了一個工具類,進行測試時在Manifest.xml中寫
這是包,utils下的HttpUtils是工具類 在Manifest.xml檔案下寫<instrumentation時報錯,<instrumentation></instrumentation>部分程式碼如下:<instrumentati
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是