您如何確保在新增更多功能或更改現有功能時,應用程式能繼續正常執行?透過編寫測試。

單元測試對於驗證單個函式、方法或類的行為非常有用。test 包提供了編寫單元測試的核心框架,而 flutter_test 包則提供了用於測試 widget 的附加工具。

本食譜透過以下步驟演示了 test 包提供的核心功能:

  1. 新增 testflutter_test 依賴。
  2. 建立測試檔案。
  3. 建立要測試的類。
  4. 為我們的類編寫 test
  5. 將多個測試組合到一個 group 中。
  6. 執行測試。

有關 test 包的更多資訊,請參閱 test 包文件

1. 新增測試依賴

#

test 包提供了在 Dart 中編寫測試的核心功能。這是編寫供 Web、伺服器和 Flutter 應用使用的包的最佳方法。

要將 test 包新增為開發依賴項,請執行 flutter pub add

flutter pub add dev:test

2. 建立測試檔案

#

在本例中,建立兩個檔案:counter.dartcounter_test.dart

counter.dart 檔案包含您要測試的類,並位於 lib 資料夾中。counter_test.dart 檔案包含測試本身,並位於 test 資料夾內。

通常,測試檔案應位於 Flutter 應用程式或包根目錄下的 test 資料夾內。測試檔案應始終以 _test.dart 結尾,這是測試執行程式在查詢測試時使用的約定。

完成後,資料夾結構應如下所示:

counter_app/
  lib/
    counter.dart
  test/
    counter_test.dart

3. 建立要測試的類

#

接下來,您需要一個要測試的“單元”。請記住:“單元”是函式、方法或類的另一種說法。在此示例中,在 lib/counter.dart 檔案中建立一個 Counter 類。它負責遞增和遞減從 0 開始的 value

dart
class Counter {
  int value = 0;

  void increment() => value++;

  void decrement() => value--;
}

注意: 為簡單起見,本教程不遵循“測試驅動開發”方法。如果您更習慣那種開發風格,可以隨時採用。

4. 為我們的類編寫測試

#

counter_test.dart 檔案中,編寫第一個單元測試。測試使用頂級 test 函式定義,您可以使用頂級 expect 函式檢查結果是否正確。這兩個函式都來自 test 包。

dart
// 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

dart
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

    1. 開啟 counter_test.dart 檔案。
    2. 轉到 **執行** > **執行 'tests in counter_test.dart'**。您也可以按適用於您平臺的相應鍵盤快捷鍵。
  • VSCode

    1. 開啟 counter_test.dart 檔案。
    2. 轉到 **執行** > **開始除錯**。您也可以按適用於您平臺的相應鍵盤快捷鍵。

在終端中執行測試

#

要從終端執行所有測試,請在專案根目錄下執行以下命令:

flutter test test/counter_test.dart

要執行您放入一個 group 中的所有測試,請在專案根目錄下執行以下命令:

flutter test --plain-name "Test start, increment, decrement"

本示例使用了**第 5 節**中建立的 group

要了解有關單元測試的更多資訊,您可以執行此命令:

flutter test --help