跳到主內容

單元測試簡介

如何編寫單元測試。

您如何確保您的應用在新增更多功能或更改現有功能時繼續正常工作? 透過編寫測試。

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

本教程演示了 test 包提供的核心功能,具體步驟如下:

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

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

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. 轉到 Run > Run 'tests in counter_test.dart'。 您還可以按平臺上的相應鍵盤快捷鍵。
  • VSCode

    1. 開啟 counter_test.dart 檔案
    2. 轉到 Run > Start Debugging。 您還可以按平臺上的相應鍵盤快捷鍵。

在終端中執行測試

#

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

flutter test test/counter_test.dart

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

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

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

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

flutter test --help