はじめに
この記事では、ユニットテストの基本と、具体例として新規登録時のパスワードバリデーションを題材にテストの実装を紹介します。
1. ユニットテストとは?
ユニットテストは、関数やメソッドなどの小さな単位で機能が正しく動作しているかを確認するテストです。これにより、バグの早期発見や、リファクタリング後の動作確認が容易になります。
2. ユニットテストの準備
Flutterには、ユニットテストのためのパッケージが既に含まれています。pubspec.yaml
で次の設定を確認してください。
dev_dependencies:
flutter_test:
sdk: flutter
テストコードは test/
ディレクトリに配置します。例えば、test/validators_test.dart
などにファイルを作成します。
3. パスワードバリデーションのテストを実装
3.1 パスワードバリデーション関数
以下の条件を満たすパスワードを有効とする関数を作成します:
- 8文字以上
- 数字を含む
- 特殊文字を含む
// lib/validators.dart
bool validatePassword(String password) {
if (password.length < 8) return false;
if (!password.contains(RegExp(r'\d'))) return false;
if (!password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]'))) return false;
return true;
}
3.2 パスワードバリデーションのユニットテスト
次に、この関数に対するテストを作成します。
// test/validators_test.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:my_app/validators.dart';
void main() {
group('validatePassword', () {
test('短すぎるパスワードは無効', () {
expect(validatePassword('short1!'), false);
});
test('数字を含まないパスワードは無効', () {
expect(validatePassword('Password!'), false);
});
test('特殊文字を含まないパスワードは無効', () {
expect(validatePassword('Password123'), false);
});
test('すべての条件を満たすパスワードは有効', () {
expect(validatePassword('Password123!'), true);
});
});
}
3.3 expect
関数の説明
expect
関数は、テストで期待される結果と実際の結果を比較するための関数です。
- 第1引数: 実際の結果(関数の出力など)
- 第2引数: 期待される結果(期待する値)
例えば、expect(validatePassword('Password123!'), true)
は、validatePassword('Password123!')
の結果が true
であることを確認します。
4. テストの実行方法
4.1 テストの実行コマンド
ターミナルで以下のコマンドを実行し、テストを実行します。
flutter test test/validators_test.dart (特定のファイルをテストしたい場合)
flutter test
4.2 実行結果
テストが成功した場合、以下のように表示されます。
00:01 +4: All tests passed!
まとめ
ユニットテストは、アプリの信頼性を高め、バグを防ぐために非常に有効です。今回のパスワードバリデーションのように、関数の動作を検証するテストを書くことで、コードが正しく動作しているかを簡単に確認できます。テストを継続的に実行して、品質の高いアプリ開発を進めていきましょう。