Unit テストの expect の詳しい使い方

Page content

Flutterの Unit テストを行う時に使うexpect関数の使い方を詳しく紹介します。

このエントリーをはてなブックマークに追加

事前準備

あらかじめtestパッケージをインストールしておく必要があります。こちらのページを参考にプロジェクトにtestパッケージを導入してください。

expect関数とは

API は以下のようになっています。

void expect (
  dynamic actual,
  dynamic matcher, {
  String reason,
  dynamic skip,
  @Deprecated("Will be removed in 0.13.0.") bool verbose: false,
  @Deprecated("Will be removed in 0.13.0.") ErrorFormatter formatter
  }
)

actualmatcherと一致してたら成功で、不一致だと失敗でエラーになります。

reasonにはテストが失敗した理由を指定します。。reasonを指定しなくてもmatcherが失敗した理由を表示してくれます。reasonを指定した場合、matcherの出力のあとに表示されます。

skipには文字列かtrueを指定するとそのテストはスキップされます。文字列を指定した場合、なぜスキップしたかを記述することができます。

verboseformatterはもう使用しません。

expect関数の簡単な使い方

まず、expect関数の一番簡単な使い方を紹介します。

var num = 3;
expect(num, 3);

actualとして、3が代入されたnumを指定し、matcherに期待値の3を指定します。もちろんこのテストはパスします。

var num = 3;
expect(num, 2); // 一致しないため失敗する

actualとして、3が代入されたnumを指定し、matcherに期待値の2を指定します。このテストは失敗し、以下のように表示されます。

上の例のようにmatcherに値を直接指定すると、後述するequals関数でラップされます。

このequals関数はmatcherパッケージに属する関数で、equalsの他に様々な便利な関数や定数が用意されています。

matcherパッケージとは

actualが期待値にあっているかどうか、マッチしているかどうかをチェックするためのパッケージです。

matcherパッケージには様々な便利な関数や定数があるので、いくつか使うことが多そうな関数や定数紹介します。

equals メソッド

equalsメソッドはactualと完全に一致する場合成功します。

var num = 3;
expect(num, equals(3));

先ほど値を直接指定するとequals関数でラップされると書きましたが、上記のようなコードになります。

isXXX 系メソッド

actualがどんな条件だと成功になるかを表す様々定数が定義されています。

使用頻度が高そうな定数を以下にリストアップしてみました。

メソッド名 意味
isList List かどうか
isMap Map かどうか
isPositive 正の値かどうか
isNonPositive 正の値じゃないかどうか
isNegative 負の値かどうか
isNonNegative 負の値じゃないかどうか
isZero 0 かどうか
isNonZero 0 じゃないかどうか
isEmpty 空かどうか
isNotEmpty 空じゃないかどうか
isNull Null かどうか
isNotNull Null じゃないかどうか
isException 例外かどうか
isTrue 真かどうか
isFalse 偽かどうか
isNaN NaN かどうか
isNotNaN NaN じゃないかどうか
isNoSuchMethodError 関数がないエラーかどうか

使い方

例えば、正の値かどうかをチェックするには以下のように書きます。

var num = 3;
expect(num, isPositive);

公式ドキュメント

このエントリーをはてなブックマークに追加