單元測試簡介
您如何確保在新增更多功能或更改現有功能時,應用程式能繼續正常執行?透過編寫測試。
單元測試對於驗證單個函式、方法或類的行為非常有用。test 包提供了編寫單元測試的核心框架,而 flutter_test 包則提供了用於測試 widget 的附加工具。
本食譜透過以下步驟演示了 test 包提供的核心功能:
- 新增
test或flutter_test依賴。 - 建立測試檔案。
- 建立要測試的類。
- 為我們的類編寫
test。 - 將多個測試組合到一個
group中。 - 執行測試。
有關 test 包的更多資訊,請參閱 test 包文件。
1. 新增測試依賴
#test 包提供了在 Dart 中編寫測試的核心功能。這是編寫供 Web、伺服器和 Flutter 應用使用的包的最佳方法。
要將 test 包新增為開發依賴項,請執行 flutter pub add。
flutter pub add dev:test2. 建立測試檔案
#在本例中,建立兩個檔案:counter.dart 和 counter_test.dart。
counter.dart 檔案包含您要測試的類,並位於 lib 資料夾中。counter_test.dart 檔案包含測試本身,並位於 test 資料夾內。
通常,測試檔案應位於 Flutter 應用程式或包根目錄下的 test 資料夾內。測試檔案應始終以 _test.dart 結尾,這是測試執行程式在查詢測試時使用的約定。
完成後,資料夾結構應如下所示:
counter_app/
lib/
counter.dart
test/
counter_test.dart3. 建立要測試的類
#接下來,您需要一個要測試的“單元”。請記住:“單元”是函式、方法或類的另一種說法。在此示例中,在 lib/counter.dart 檔案中建立一個 Counter 類。它負責遞增和遞減從 0 開始的 value。
class Counter {
int value = 0;
void increment() => value++;
void decrement() => value--;
}注意: 為簡單起見,本教程不遵循“測試驅動開發”方法。如果您更習慣那種開發風格,可以隨時採用。
4. 為我們的類編寫測試
#在 counter_test.dart 檔案中,編寫第一個單元測試。測試使用頂級 test 函式定義,您可以使用頂級 expect 函式檢查結果是否正確。這兩個函式都來自 test 包。
// 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);
});
}5. 將多個測試組合到一個 group 中
#如果您想執行一系列相關的測試,請使用 flutter_test 包的 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檔案。 - 轉到 **執行** > **執行 'tests in counter_test.dart'**。您也可以按適用於您平臺的相應鍵盤快捷鍵。
- 開啟
VSCode
- 開啟
counter_test.dart檔案。 - 轉到 **執行** > **開始除錯**。您也可以按適用於您平臺的相應鍵盤快捷鍵。
- 開啟
在終端中執行測試
#要從終端執行所有測試,請在專案根目錄下執行以下命令:
flutter test test/counter_test.dart要執行您放入一個 group 中的所有測試,請在專案根目錄下執行以下命令:
flutter test --plain-name "Test start, increment, decrement"本示例使用了**第 5 節**中建立的 group。
要了解有關單元測試的更多資訊,您可以執行此命令:
flutter test --help