Android3分鐘帶你入門開發測試

本文首發於 vivo互聯網技術 微信公衆號
連接: https://mp.weixin.qq.com/s/-TW7p3z3vJ3GJw7X9u7dVg
做者:Zhu Yifei

做爲一名合格的開發人員,基本的開發測試能力必不可少,開發測試分單元測試和UI測試,經過開發測試能夠減小開發人員自測時間,提高開發質量。本篇文章能夠幫助初級開發人員快速瞭解開發測試,快速上手測試編碼。本篇文章一樣適用於應用軟件初級測試工程師,快速上手編碼測試用例。javascript

1、Android 3分鐘帶你入門開發測試

在正式學習Android應用測試以前,咱們先來了解如下幾個概念。java

一、JUnit

JUnit是一個Java語言的單元測試框架。

二、Instrumentation

該框架基於JUnit,所以既能夠直接使用Junit 進行測試。又其爲Android 應用的每種組件提供了測試基類,所以也可使用Instrumentation 來測試Android 組件。

Instrumentation和Activity有點相似,只不過Activity是須要一個界面的,而Instrumentation並非這樣的,咱們能夠將它理解爲一種沒有圖形界面的,具備啓動能力的,用於監控其餘類(用Target Package聲明)的工具類。android

三、Espresso

自動化測試使用Android的Instrumentation API,這些API的調用在一個與UI線程不一樣的線程中運行,所以,使用自動化方法測試用戶界面會致使嚴重的併發問題,進而產生不一致不可靠的測試結果。Google對這個問題的解決方案是Espresso,它是一個測試框架,可以使UI測試在多線程環境中安全地運行,並移除了關於編寫測試的大部分樣板代碼。

2、測試應用

AndroidJUnit基於JUnit,使得咱們既能夠在JVM上運行本地單元測試(local unit tests),也能夠在Android設備上進行儀器測試(instrumented tests)。測試代碼的位置取決於您要編寫的測試的類型。Android Studio 爲如下兩種測試類型提供了源代碼目錄(源集):安全

本地單元測試微信

  • 位於 module-name/src/test/java/。
  • 這些測試在計算機的本地 Java 虛擬機 (JVM) 上運行。當您的測試沒有 Android 框架依賴項或當您能夠模擬 Android 框架依賴項時,能夠利用這些測試來儘可能縮短執行時間。
  • 在運行時,這些測試的執行對象是去掉了全部 final 修飾符的修改版 android.jar。這樣一來,您就可使用 Mockito 之類的常見模擬庫。

儀器測試多線程

  • 位於 module-name/src/androidTest/java/。
  • 這些測試在硬件設備或模擬器上運行。這些測試有權訪問 Instrumentation API,讓您能夠獲取某些信息(例如您要測試的應用的 Context), 而且容許您經過測試代碼來控制受測應用。能夠在編寫集成和功能 UI 測試來自動化用戶交互時,或者在測試具備模擬對象沒法知足的 Android 依賴項時使用這些測試。
  • 因爲儀器測試內置於 APK 中(與您的應用 APK 分離),所以它們必須擁有本身的 AndroidManifest.xml 文件。不過,因爲 Gradle 會自動在構建時生成該文件,所以它在您的項目源集中不可見。您能夠在必要時(例如須要爲 minSdkVersion 指定其餘值或註冊測試專用的運行偵聽器時)添加本身的清單文件。構建應用時,Gradle 會將多個清單文件合併成一個清單。

當您新建項目或添加應用模塊時,Android Studio 會建立以上所列的測試源集,並在每一個源集中加入一個示例測試文件。您能夠在project窗口中看到他們,如圖1-1所示:併發

(圖1-1)app

添加一個新測試

在寫單元測試以前,務必肯定gradle中作好相應的配置。如圖1-2所示:框架

(圖1-2)ide

接下來就正式入門啦,表激動,一步步來會很簡單哦~

一、建立一個本地單元測試

第一步 :打開包含您想測試的代碼的 Java 文件。如Calculator.java。

/**
* [description]
* author: yifei
* created at 17/6/8 下午12:00
*/
public class Calculator {
public double sum(double a, double b){
return a + b;
   }
 
 
public double substract(double a, double b){
return a - b;
   }
 
 
public double divide(double a, double b){
return a * b;
   }
 
 
public double multiply(double a, double b){
return a / b;
   }
}

第二步:點擊您想測試的類或方法,而後右擊如圖2所示,或按 Ctrl+Shift+T (⇧⌘T)。

(圖2)

選擇create test如圖3所示,並選擇setUp/@Before和須要測試的方法,而後點擊OK。

(圖3)

在 Choose Destination Directory 對話框中,點擊與您想建立的測試類型對應的源集:androidTest 對應於儀器測試,test 對應於本地單元測試。而後點擊 OK。如圖4所示:

(圖4)

這時在module-name/src/test/java/下出現了CalculatorTest.java。

/**
* [description]
* author: yifei
* created at 17/6/8 下午12:01
*/
public class CalculatorTest {
 
private Calculator mCalculator;
 
@Before
public void setUp() throws Exception {
mCalculator = new Calculator();
   }
 
@Test
public void sum() throws Exception {
//expected: 6, sum of 1 and 5
assertEquals(6d, mCalculator.sum(1d, 5d), 0);
   }
@Test
public void substract() throws Exception {
assertEquals(1d, mCalculator.substract(5d, 4d), 0);
   }
 
@Test
public void divide() throws Exception {
assertEquals(4d, mCalculator.divide(20d, 5d), 0);
   }
 
@Test
public void multiply() throws Exception {
assertEquals(10d, mCalculator.multiply(2d, 5d), 0);
   }
}

此時選中方法名,右擊run'method()'。

(圖5)

因而一個本地單元測試就完成啦,是否是比較簡單呢?

二、建立一個Espresso測試

在建立測試以前,咱們創建一個待測試的TestActivity.java,添加一下簡單的交互。在EditText中輸入任意字符串,點擊Button在TextView中顯示出來,如圖六、7所示:

(圖6)

(圖7)

爲了照顧到更多小夥伴,這裏儘可能寫的細點,對應的Activity/xml文件以下所示:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
 
public class TestActivity extends AppCompatActivity implements View.OnClickListener {
 
private TextView textView;
private EditText editText;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
init();
   }
 
public void init(){
textView = (TextView) findViewById(R.id.textView);
editText = (EditText) findViewById(R.id.editText);
findViewById(R.id.btnText).setOnClickListener(this);
   }
 
@Override
public void onClick(View view) {
int id = view.getId();
if (id == R.id.btnText) {
textView.setText("Hello, " + editText.getText().toString() + "!");
       }
   }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.testing.androidtest.TestActivity">
 
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
 
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
 
</android.support.design.widget.AppBarLayout>
 
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
<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:id="@+id/btnText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello world!"
android:layout_below="@+id/editText"/>
 
</RelativeLayout>
 
</android.support.design.widget.CoordinatorLayout>

作完以上工做後,咱們一塊兒來建立並運行Espresso測試。在module-name/src/androidTest/java/下建立TestActivityInstrumentationTest.java

測試類經過AndroidJUnitRunner運行,並執行button的onClick(View)方法。下面將逐行解釋都作了什麼:

  1. 首先,找到ID爲editText的view,輸入Peter,而後關閉鍵盤;
  2. 接下來,點擊Hello world!的View,咱們既可使用ID來找到一個控件,還能夠經過搜索它上面的文字來找到它;
  3. 最後,將TextView上的文本同預期結果對比,若是一致則測試經過;

你也能夠右鍵點擊域名運行測試,選擇Run> TestActivityInstrumentationTest...如圖8所示:

(圖8)

這樣就會在模擬器或者鏈接的設備上運行測試,你能夠在手機屏幕上看到被執行的動做(好比在EditText上打字)以下視頻所示。

最後會在Android Studio輸出經過和失敗的測試結果。

(圖9)

最後恭喜你,你也入門了。

更多內容敬請關注vivo 互聯網技術微信公衆號

注:轉載文章請先與微信號:Labs2020聯繫

相關文章
相關標籤/搜索