トレタ開発者ブログ

飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。

Flutterアプリにテストコードを書きました。

はじめに

この記事はトレタ Advent Calendar 2021の15日目の記事です。

こんにちは、iOSエンジニアのarisaです。
本日は、Flutterのテストを書いたはなしです。

弊社のトレタO/Xでは、大きく分けて2つのプロダクトがあります。
お店のスタッフさんが使う画面と、お店に来たお客さんが使う画面です。
そのうち、お店のスタッフさんが使う方のアプリでは、Flutterを採用しています。
今回私がテストを実装したのは、そんなお店のスタッフさん用のtoBアプリです。

やったこと

とても簡単なユニットテストから実装し始めました。 Intから「〇〇円」というString表示に変換するextensionを例とします。

extension OxInt on int {
  String formatYen() {
    final numberFormat = NumberFormat('#,###');
    return '${numberFormat.format(this)}円';
  }
void main() {
  group('formatYen', () {
    test('basic', () {
      const price = 1000;
      final result = price.formatYen();
      expect(result, '1,000円');
    });

    test('zero', () {
      const price = 0;
      final result = price.formatYen();
      expect(result, '0円');
    });

    test('cheap', () {
      const price = 100;
      final result = price.formatYen();
      expect(result, '100円');
    });

    test('Expensive', () {
      const price = 1000000;
      final result = price.formatYen();
      expect(result, '1,000,000円');
    });

    test('minus-cheap', () {
      const price = -100;
      final result = price.formatYen();
      expect(result, '-100円');
    });

    test('minus', () {
      const price = -1000;
      final result = price.formatYen();
      expect(result, '-1,000円');
    });

    test('minus-expensive', () {
      const price = -1000000;
      final result = price.formatYen();
      expect(result, '-1,000,000円');
    });
  });
}

こんな感じで少しずつ実装しています。
実は今まで、私はテストコードに触れたことがなかったため、たった1つの関数でもこれだけ複数の状況について考慮しなければいけないとは……と少し驚いてしまいました。
私はO/Xの開発チームには遅れて加わったのですが、テストコードを書くためには元のコードをしっかり理解しないといけないので、
今回の実装により、だいぶん理解が深まって来たのではないかと思っています。

私がテストコードを担当するまで、テストのカバー率は約7%でした。
でも、この1ヶ月で約2倍の13%まで上昇させることができました。
引き続き来年もテストのカバー率を上げていき、安定した開発の一助となれればと思っています。

最後に

トレタでは一緒に開発する仲間を募集しています。
興味がある方は是非カジュアル面談へお越しください!

www.wantedly.com

© Toreta, Inc.

Powered by Hatena Blog