Android單元測試-作用以及簡單示例
前提概要
受人嫌棄的單元測試
對於單元測試這個知識點,其實很多開發者是不太接觸的,包括筆者,在實習之前也並未實用過單元測試,或者說並沒感受到單元測試的好處。
對於bug的除錯,筆者之前更傾向於使用log和斷點除錯,可以說會了這兩個,大部分的邏輯bug都能自己解決了。這兩個與看似臃腫的單元測試程式碼相比更受大家的喜愛。
但是,使用log和斷點除錯的前提是開發人員較少,甚至是單人開發的情況。如果我自己開發,我完全可以每次都使用整合測試,我知道每一個功能會涉及哪些模組的程式碼,然後根據邏輯設定log或者斷點除錯。
多人開發難以處理的問題
然而,如果是多人開發呢?每一個模組的程式碼很可能是由不同的人分開負責的,bug的產生由不同模組共同產生。每一個模組的程式碼可能都比較複雜,產生bug後,閱讀其他人的模組本身比較浪費時間,其次基本不可能讓你去修改其他人的程式碼,這可能會破壞他人的程式碼結構。
而且錯誤可能也並不在其他人的程式碼中,也可能是你們的互動方式有問題。產生bug的原因有太多,並且由單人直接log或者斷點除錯難以處理,那麼這種情況怎麼辦呢?
單元測試就一定程度上處理了這種困難的情況:給每一個模組加上單元測試,如果該模組可以通過單元測試,就代表沒有問題。
在這種情況下,程式設計師們面對的問題不再是要讓整個專案到達理想的效果,而是讓自己所面對的單元測試可以通過。這樣就大大減少了多人開發中的互動成本。
簡單示例
主要就兩個檔案:
package com.example.xujiajia_sx.myexpressotest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public static int calculate(int a,int b){
return a+b+1;
}
}
package com.example.xujiajia_sx.myexpressotest;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Created by xujiajia_sx on 2017/8/14.
*/
public class SimpleTest {
@Test
public void CalculateTest() throws Exception {
assertEquals(4, MainActivity.calculate(1,2));
}
}
這個例子是測試了MainActivity.calculate()方法。可以在不執行這個app的情況下直接通過按SimpleTest .CalculateTest()左邊的小三角測試,如下圖:
我們calculate()方法的邏輯是返回a+b+1,所以是4,最終不會報錯,如果我們把assertEquals中的4改成3,效果如下:
如圖,測試會直接報錯,並且定位到錯誤的那一行,然後我們就可以看到是MainActivity.calculate()輸出的值不等於3所造成的。
Assert方法
示例本身比較簡單,但是對於剛剛接觸單元測試讀者可能對assertEquals()比較陌生,這是Assert這個類中的靜態方法,單元測試中一般就是通過它來判斷是否達到理想的效果。
筆者此處使用了int之間的判斷,Assert中還有很多其他的用法,筆者可以去AndroidDevelpers上自己檢視,此處為了方便,筆者為了方便就直接複製了。
static void assertEquals(boolean expected, boolean actual)
static void assertEquals(String message, long expected, long actual)
static void assertEquals(short expected, short actual)
static void assertEquals(String message, String expected, String actual)
static void assertEquals(String message, int expected, int actual)
static void assertEquals(Object expected, Object actual)
static void assertEquals(String message, boolean expected, boolean actual)
static void assertEquals(String expected, String actual)
static void assertEquals(String message, short expected, short actual)
static void assertEquals(String message, Object expected, Object actual)
static void assertEquals(char expected, char actual)
static void assertEquals(byte expected, byte actual)
static void assertEquals(double expected, double actual, double delta)
static void assertEquals(String message, char expected, char actual)
static void assertEquals(float expected, float actual, float delta)
static void assertEquals(String message, double expected, double actual, double delta)
static void assertEquals(String message, byte expected, byte actual)
static void assertEquals(String message, float expected, float actual, float delta)
static void assertEquals(long expected, long actual)
static void assertEquals(int expected, int actual)
static void assertFalse(String message, boolean condition)
static void assertFalse(boolean condition)
static void assertNotNull(Object object)
static void assertNotNull(String message, Object object)
static void assertNotSame(String message, Object expected, Object actual)
static void assertNotSame(Object expected, Object actual)
static void assertNull(String message, Object object)
static void assertNull(Object object)
static void assertSame(String message, Object expected, Object actual)
static void assertSame(Object expected, Object actual)
static void assertTrue(String message, boolean condition)
static void assertTrue(boolean condition)
static void fail(String message)
static void fail()
static void failNotEquals(String message, Object expected, Object actual)
static void failNotSame(String message, Object expected, Object actual)
static void failSame(String message)
static String format(String message, Object expected, Object actual)
總結
這篇文章主要介紹了Android單元測試的作用和簡單的示例。但是簡單的對方法的測試相信並不能滿足求知慾強烈的讀者。
下一篇文章筆者會講述Android單元測試中對Activity的測試方法。
相關文章
- 測試 之Java單元測試、Android單元測試JavaAndroid
- 如何寫好測試用例以及go單元測試工具testify簡單介紹Go
- Android 單元測試實踐Android
- 關於 Android 單元測試Android
- Angular8單元測試示例指南Angular
- 單元測試:單元測試中的mockMock
- .net持續整合單元測試篇之單元測試簡介以及在visual studio中配置Nunit使用環境
- Android自動化測試入門(四)單元測試Android
- android單元測試遇到問題總結Android
- Kafka簡單示例以及常用命令Kafka
- 記一次簡單的vue元件單元測試Vue元件
- 記一次想簡單化的單元測試
- 換種思路寫Mock,讓單元測試更簡單Mock
- 單元測試-【轉】論單元測試的重要性
- SpringBoot單元測試Spring Boot
- python 單元測試Python
- iOS 單元測試iOS
- Flutter 單元測試Flutter
- 單元測試 Convey
- 單元測試真
- golang單元測試Golang
- 單元測試工具
- 前端單元測試前端
- 十五、單元測試
- Go單元測試Go
- 聊聊單元測試
- 一文全面瞭解Android單元測試Android
- 解讀Android官方MVP專案單元測試AndroidMVP
- Android MVP模式--簡單實用示例 BMIAndroidMVP模式
- 單元測試,只是測試嗎?
- Testing Flutter apps翻譯-單元測試簡介FlutterAPP
- cursor: pin S簡單說明以及測試、解決
- 編寫你的第一個 Android 單元測試Android
- android-MVP架構中Presenter的單元測試AndroidMVP架構
- JavaScript單元測試框架JavaScript框架
- 單元測試 -- mocha + chaiAI
- React元件單元測試React元件
- Spring Boot 單元測試Spring Boot
- Vue單元測試探索Vue