前言
在前一篇Testing: 單元測試簡介一文中介紹完單元測試後,也認識了不依賴單元測試框架,而改用手動撰寫單元測試是非常耗時和麻煩的,好不容易讓已寫好的程式碼運行穩定,當下次撰寫新的程式碼時,那些擾人的手動判斷又要重複一次,真是太可怕了。完全手工的方式撰寫,機械化地執行它們,很容易出錯也浪費時間,我們希望能透過自動化建置來解決這些問題,這時我們就需要單元測試框架的輔助。第一個單元測試
在Android的開發中,撰寫的語言是以Java為基礎,所以測試的框架便是JUnit。當你開啟一個新的Android專案時,你無須引入JUnit任何的函式庫,Gradle當中就已經幫你包含進去了,如下所示。dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.1'
testCompile 'junit:junit:4.12'
}
Android Studio同時也會為你建置一個單元測試案例(Test case),可以先看看這個預設的測試案例具備什麼元素,如下所示。
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
這個測試案例的類別名稱為ExampleUnitTest,並且隸屬於test package底下,而這個package都是放置與單元測試相關的案例,也就是直接運行在JVM層的測試。這個類別包含了一個名為@Test的annotation,測試案例稱為addition_isCorrect(),裡面寫了assertEquals(4, 2 + 2)的程式碼,所以可以知道撰寫一個測試案例至少要具備這些元素。
- 測試類別: 這個類別主要包含你應有的測試案例。
- Annotation: 若沒有增加這個@Test這個Annotation,編譯時就會無法得知這個方法是否為測試方法。你也可以試著將這個移除,就會發現原本左邊的測試按鈕會消失,變為一般的方法了,如下圖。
- Assertion: Assertion的意思為斷言,其實就是斷定你所預期的行為是否正常。
測試結果
當知道具備這些基本元素後,可以試著執行看看,並觀察其結果。在檔案列表中,對著該測試類別點選右鍵,選擇Run ‘XXXXXX’,如下圖。
或是程式碼中針對某個測試案例執行也行,點選方法左邊的執行圖示即可,如下圖。
執行完後的結果如下圖所示,綠燈是通過;紅燈則是失敗。
小結
順利執行完簡單的Android單元測試,對於基本的實作有了初步概念,一個測試案例至少需具備測試類別名稱、Test的Annotation,以及你所斷言的預期行為,下一篇我們要正式進入練習單元測試的領域啦!
沒有留言:
張貼留言