Flutter

【Flutter】Riverpod使用時の単純なユニットテストの書き方

最近、Flutterでアプリを作成する際にテストをしっかりと書くようにしています。

Riverpodを使用するときのユニットテストで若干躓いたので、備忘録としてまとめておきます。

Flutterによる自動テストを3記事に分けて公開するうちの1記事目です。

本記事ではユニットテストについてを記載します。

 

2記事目「【Flutter】Widgetテストのシンプルな書き方」はこちらからご覧ください。

【Flutter】Widgetテストのシンプルな書き方Flutterでアプリを作成する際に自動テストをしっかりと書くようにしています。 Flutterによる自動テストを3記事に分けて公...

3記事目「【Flutter】Integrationテストのシンプルな書き方」はこちらからご確認ください。

【Flutter】Integrationテストのシンプルな書き方Flutterでアプリを作成する際に自動テストをしっかりと書くようにしています。 Flutterによる自動テストを3記事に分けて公...

ユニットテストするControllerクラス

Riverpodでコードを書いていると、Controllerのようなロジッククラスをよく書くと思います。

ロジッククラスにはアプリの処理がゴリゴリに書いてあるので、しっかりとテストをしたいところです。

今回は以下のような超簡易Controllerクラスをテストする場合を想定します。

final calcProvider = StateNotifierProvider((ref) => CalcController(ref.read));

class CalcController extends StateNotifier<CalcState> {
  CalcController(this._read) : super(CalcState(
    text: "0",
  ));

  void input(String text){
    if (state.text == "0") {
      state = state.copyWith(text: text);
    } else {
      state = state.copyWith(text: state.text + text);
    }
  }

  final Reader _read;
}

電卓に表示する値(初期値0)を保持していて、電卓のボタンを押したら値が更新されるようなControllerです。

Controllerのテストクラスの書き方

早速テストクラスを書いていきます。

void main() {
  late CalcController target;

  setUp(() {
    final container = ProviderContainer();
    target = container.read(calcProvider.notifier);
  });

  test("riverpod test1", (){
    expect(target.debugState.text, "0");
    target.input("1");
    target.input("5");
    expect(target.debugState.text, "15");

  });
  test("riverpod test2", (){
    expect(target.debugState.text, "0");
    target.input("2");
    target.input("3");
    target.input("4");
    expect(target.debugState.text, "234");

  });
}

こんな感じになりました。

Containerをうまく使うことで、テスト用のデータを渡すことができたりするようです。

それ以外は特に目立ったところはなく、標準のflutter_testを使用して、testメソッドを作成し、expectでテストをしていきます。

まとめ

Riverpodを使用した場合のユニットテストコードの備忘録でした。

Riverpod関連のパッケージ内にも便利なテスト用のコードが含まれているので、そのあたりを駆使して良い感じにコードがかけそうです。

ひとまず超シンプルパターンはこの記事のように書けば良さそうなので、これを基礎として、もっと様々な処理を書いていきたいところです。

 

Flutter学習情報

Flutterを勉強するのに最適な参考書は、以下の「基礎から学ぶFlutter」です。

環境構築から、Dart/Flutterの基本/テストやパフォーマンスチューニングまで一通り学ぶことができます。

また、当ブログではFlutterを初心者が学ぶためにオススメな方法を「Flutter を初心者が学ぶおすすめの勉強法!【間違いない動画があります】」という記事で公開していますので、Flutterに興味がある方は是非読んでみてください。

Flutterに入門するためのオススメ勉強法【間違いない動画があります】Flutter 初心者が勉強する場合に、最高の動画をお伝えします。...

動画学習がしたい!という方にオススメの記事がこちらです。

【Udemy】スマホアプリ作成を学ぶときに受講しておきたい講座3選【Flutter】スマホアプリを初めて作成する場合、何らかの教材を見ながら進めると思います。 私は動画で学習するのが好きで、非常に効率よく学ぶことが...

Flutterの将来性はどうなのか?をまとめた記事はこちらです。

【2021/8 更新】Flutterの将来性をトレンドやGoogleの情勢から分析した結果クロスプラットフォーム開発のフレームワークの中で近年注目されているのが「Flutter」です。 私も2020年の4月頃から注目して...