單元測試介紹
我們如何保證 app 在增加了新屬性或者改變了現有功能之後還能正常工作呢?答案是寫測試!
使用單元測試可輕鬆地驗證單個函式、方法或類別的行為。
test
這個 package 提供了寫單測的核心框架,
flutter_test
package 則提供了額外的功能來測試 widget。
本教程將會為大家示範 test
package 的用法,內容如下:
-
將
test
或者flutter_test
加入依賴; -
建立測試檔案;
-
建立一個要測試的類;
-
為建立的類寫一個測試;
-
整合多個測試到一個
group
; -
執行測試。
關於 package 測試的更多內容,可移步至 test package 的文件。
1. 新增測試依賴
如果 Dart package 沒有依賴 Flutter,可以匯入 test
package。
Test package 提供了編寫測試所需要的核心功能。當我們寫的 package 需要被 web、伺服器端和 Flutter app 使用時,這是最佳的方式。
執行 flutter pub add
將 test
新增為依賴:
$ flutter pub add dev:test
2. 建立測試檔案
本例中,我們會建立兩個檔案:counter.dart
和 counter_test.dart
。
counter.dart
檔案包含一個位於 lib
資料夾的待測試類,而位於 test
資料夾的 counter_test.dart
檔案將包含測試本身。
通常測試檔案應位於放置在 Flutter 應用或套件的根目錄下的 test
資料夾。測試檔案通常以 _test.dart
命名,這是 test runner 尋找測試檔案的慣例。
建立完成後,檔案目錄結構如下:
counter_app/
lib/
counter.dart
test/
counter_test.dart
3. 建立一個要測試的類
下一步,我們需要一個「單元」來測試。記住:「單元」是一個抽象的名稱,它可以表示一個函式、方法或者類。本例中,我們會在 lib/counter.dart
檔案中建立一個 Counter
類。它負責增加或減少一個從 0
開始的 value
。
class Counter {
int value = 0;
void increment() => value++;
void decrement() => value--;
}
注意: 為了簡化內容,本教程沒有遵守「測試驅動開發」的寫法。如果你擅長那種開發模式,當然可以選擇用那種方式來寫。
4. 為建立的類寫一個測試
我們將在 counter_test.dart
檔案中寫第一個測試。使用頂級函式 test
來定義,可透過執行頂級函式 expect
來檢查結果正確與否。這兩個函式都來自 test
這個 package。
// Import the test package and Counter class
import 'package:counter_app/counter.dart';
import 'package:test/test.dart';
void main() {
test('Counter value should be incremented', () {
final counter = Counter();
counter.increment();
expect(counter.value, 1);
});
}
group
5. 整合多個測試到一個 如果你想執行多個有關聯或者一個系列的測試,可以使用 test
package 提供的 group
函式將他們整合到一起。你可以用 flutter test
執行同一個組的所有測試。
import 'package:counter_app/counter.dart';
import 'package:test/test.dart';
void main() {
group('Test start, increment, decrement', () {
test('value should start at 0', () {
expect(Counter().value, 0);
});
test('value should be incremented', () {
final counter = Counter();
counter.increment();
expect(counter.value, 1);
});
test('value should be decremented', () {
final counter = Counter();
counter.decrement();
expect(counter.value, -1);
});
});
}
6. 執行測試
現在 Counter
類別和它的測試都有了,開始執行測試!
用 IntelliJ 或 VSCode 執行測試
IntelliJ 和 VSCode 的 Flutter 外掛支援執行測試。用這種方式執行測試是最好的,因為它可以提供最快的反饋閉環,而且還支援斷點除錯。
-
IntelliJ
-
開啟檔案
counter_test.dart
-
前往 Run > Run ‘tests in counter_test.dart’。你也可以用鍵盤快捷鍵執行測試。
-
-
VSCode
-
開啟檔案
counter_test.dart
-
前往 Run > Start Debugging。你也可以用鍵盤快捷鍵執行測試。
-
在終端執行測試
你也可以開啟終端,在工程根目錄輸入以下指令來執行所有測試:
flutter test test/counter_test.dart
你可以執行以下指令執行所以放在指定 group
裡的測試:
flutter test --plain-name "Test start, increment, decrement"
該例子使用的是在 第 5 小節 建立的 group
。
你可以執行下面的指令獲得更多有關單元測試的幫助:
flutter test --help