Dart:
テストの作成

どうやって:

Dartでは、testパッケージがテストの記述に一般的に使用されます。まず、pubspec.yamltestパッケージを追加します:

dev_dependencies:
  test: ^1.0.0

次に、シンプルな関数のテストを書きます。2つの数値を加算する関数があるとします:

int add(int a, int b) {
  return a + b;
}

次に、testディレクトリ内にadd_test.dartという名前のファイルを作成し、テストケースを記述します:

import 'package:test/test.dart';
import '../lib/add.dart'; // `add`関数が lib/add.dart 内にあると仮定

void main() {
  test('2つの数値の加算', () {
    var expected = 3;
    expect(add(1, 2), equals(expected));
  });
}

テストを実行するには、Dartコマンドを使用します:

$ dart test

サンプル出力は次のようになるかもしれません:

00:01 +1: 全てのテストが通過しました!

サードパーティライブラリを使用する:モッキングのためのMockito

複雑な依存関係を持つコードをテストする場合、モックオブジェクトを作成するためにMockitoを使用するかもしれません。まず、pubspec.yamlにMockitoを追加します:

dev_dependencies:
  mockito: ^5.0.0

ユーザーデータを取得するUserRepositoryクラスがあり、実際のデータベースにアクセスせずにUserRepositoryに依存するUserServiceをテストしたいとします:

import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
import 'package:your_project/user_repository.dart';
import 'package:your_project/user_service.dart';

// Mockitoを使用してMockクラスを作成
class MockUserRepository extends Mock implements UserRepository {}

void main() {
  group('UserService テスト', () {
    test('ユーザーを正常に取得', () {
      // モックインスタンスの作成
      final mockUserRepository = MockUserRepository();
      final userService = UserService(mockUserRepository);

      // モックの振る舞いのセットアップ
      when(mockUserRepository.fetchUser(1)).thenReturn(User(id: 1, name: 'テストユーザー'));

      // モックメソッドが期待される引数で呼び出されたことをアサート
      expect(userService.getUserName(1), 'テストユーザー');
      verify(mockUserRepository.fetchUser(1)).called(1);
    });
  });
}

このテストの実行は、UserServiceUserRepositoryと正しく相互作用し、モッキングを使用して実際の相互作用を制御された方法でシミュレートすることを確認します。