#19 Dartで学ぶテスト(単体テスト)の基本

Dartで関数を書いた後、それが正しく動くかをprintで確認するだけで済ませていませんか?この記事では、Dartで書いたコードを自動でチェックする「テスト」の基本を解説します。

なぜテストを書くのか

コードを修正するたびに、関連する処理が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。特にFlutterアプリ開発では、画面を毎回操作して確認する手間を大きく減らせます。

test パッケージを使ったテストの書き方

Dartでは標準的なtestパッケージがよく使われます。pubspec.yamlのdev_dependenciesに追加して導入します。

int add(int a, int b) {
  return a + b;
}
import 'package:test/test.dart';

void main() {
  test('2と3を足すと5になる', () {
    expect(add(2, 3), equals(5));
  });
}

test("名前", () { ... })という形でテストケースを書き、expect(実際の値, equals(期待値))という書き方で「等しいはず」を宣言します。ターミナルでdart testを実行すると結果が一覧表示されます。

異常系もテストしておく

正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。

test('0同士を足すと0になる', () {
  expect(add(0, 0), equals(0));
});

テスト前後の共通処理をまとめる

複数のテストで共通する準備・後片付けの処理は、setUp・tearDownを使ってまとめられます。

void main() {
  late Calculator calc;

  setUp(() {
    calc = Calculator();
  });

  test('初期値は0', () {
    expect(calc.value, equals(0));
  });
}

各テストの前にsetUpの中身が実行されるため、同じ準備コードを毎回書く必要がなくなります。

Dartならではの注意点

DartはNull安全という仕組みがあり、値が無いことを表すnullを許容する型(int?など)を扱う関数では、nullを渡した時の挙動もテストしておくと安心です。またFlutterアプリでは、画面の見た目を確認するwidget testという専用のテストの仕組みもあるので、慣れてきたらあわせて調べてみるとよいでしょう。

まとめ

テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。test・expect・setUpから始めて、Null安全を意識したテストにも挑戦してみてください。

関連記事


本ページはプロモーションを含みます。

参考書籍(PR)

Dartをもっと学びたい方には「ゼロから学ぶFlutterアプリ開発」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本