---
# System prepended metadata

title: Flutter UnitTest
tags: [flutter]

---

# Flutter UnitTest
###### tags:`flutter`

APP上的許多功能需測試的不單單只有邏輯部分，還有元件(Widget)的呈現、API的回傳與本地DB的資料，在這裡將各個需要測試的部分一一列舉出來，並寫下相關資源的關鍵字。

參考下列文章，總結有以下幾種測試方式
[【Flutter基礎概念與實作】 Day18–Flutter測試框架以及Mockito Package使用範例介紹](https://ithelp.ithome.com.tw/articles/10223393)
[Flutter如何寫測試案例](https://lihsinplayer.medium.com/flutter-%E5%A6%82%E4%BD%95%E5%AF%AB%E6%B8%AC%E8%A9%A6%E6%A1%88%E4%BE%8B-5a41bad314fb)

邏輯測試:UnitTest
[官方文件](https://flutter.dev/docs/cookbook/testing/unit/introduction)
元件測試:WidgetTest
[官方文件](https://flutter.dev/docs/cookbook/testing/widget/introduction)
模擬API:Mockito Package
[官方文件](https://flutter.dev/docs/cookbook/testing/unit/mocking)
[Mockito package](https://pub.dev/packages/mockito)
集成測試:Integration Test
[官方文件](https://flutter.dev/docs/cookbook/testing/integration/introduction)

---
## UnitTest
可參考PHPUnit瞭解寫法
1. 在pubspec.yaml內引入test套件
2. 創建一個test資料夾，跟lib資料夾於同個目錄底下
3. 創建一個dart檔，名稱跟lib資料夾內的某dart檔一樣，但於後面多了_test字樣。
```
BMICounter/
    lib/
        counter.dart
    test/
        counter_test.dart
```
4. 在counter.dart內創建一個class，並於counter_test.dart內引入counter.dart，然後開始寫測試。
```
import 'package:test/test.dart';
import 'package:counter_app/counter.dart';

void main() {
  test('Counter value should be incremented', () {
    final counter = Counter();

    counter.increment();

    expect(counter.value, 1); //測試counter.value == 1，若是則通過，否則跳錯誤，要注意型態
  });
}
```
5. 使用group將相同類型的測試放在一起
```
import 'package:test/test.dart';
import 'package:counter_app/counter.dart';

void main() {
  group('Counter', () {
    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. 於terminal執行測試的指令，顯示結果
```flutter test test/counter_test.dart```

以上是Unit Test於官方文件中的範例。
如果要測試的功能有包含database, api這類需要模擬，請參考[Mockito](https://pub.dev/packages/mockito)。