Index
以下の手順で単体テストを導入していきます。
- テストパッケージをpubspec.yamlに追加する
- テストを記述するファイルを作成する
- テスト対象となるクラスを作成する
- テストクラスを作成する
- テストをグループごとにまとめる
- テストを実行する
実際にどのようにテストを書いていくのか見ていきましょう。
以下のコードをターミナルで実行しましょう。
1 |
flutter pub add test --dev |
実行するとpubspec.yamlファイルに以下のコードが追加されます。
1 2 |
dev_dependencies: test: ^1.23.1 //versionは実行する時期によって異なる |
一般的には以下のようなファイル構成でテストファイルを作成します。
- counter.dart:テスト対象
- counter_test.dart:テストコード
1 2 3 4 5 |
app_name/ lib/ counter.dart test/ counter_test.dart |
たとえばこんな感じのクラスです。
1 2 3 4 5 6 7 |
class Counter { int value = 0; void increment() => value++; void decrement() => value--; } |
先ほど作成したクラスに対するテストクラスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 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); }); } |
上記のコードを入力するとテストコードの横に緑色の再生マークが出てくるので、それをクリックすると テストが実行され以下の画面のようにテスト結果が表示されます。
テストを複数記述するときは関連するテストごとにテストをグループ化すること見通しがよくなります。
グループ化するときは以下の例のようhにgroup() を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// Import the test package and Counter class import 'package:sample_unittest/counter.dart'; import 'package:test/test.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); }); }); } |
テスト結果は以下のような感じで表示されます。