0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

@gi-ra-ffeAdvent Calendar 2023

Day 16

Flutterアプリのテスト

Last updated at Posted at 2023-12-15

chatGPT に立ててもらったスケジュールに準じてFlutterの状態管理を勉強。

  • Day 10: Flutterアプリのテスト
    • ユニットテストとウィジェットテストの基本を学ぶ
    • シンプルなテストケースの作成と実行方法を学ぶ

種類

ウィジェットテスト (Widget Tests)

UIの個々のウィジェットが期待通りに動作するかを確認するテスト。
ウィジェットテストは比較的高速で、UIの特定の部分をテストするのに適している。

サンプルソース
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyWidget());

    // Verify that our widget has a title and message.
    expect(find.text('Title'), findsOneWidget);
    expect(find.text('Hello World'), findsOneWidget);
  });
}

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Title'),
        ),
        body: Center(
          child: Text('Hello World'),
        ),
      ),
    );
  }
}

統合テスト (Integration Tests)

アプリケーションの異なる部分が互いに適切に連携して動作するかを確認するテスト。
ウィジェットテストよりも広範囲で、より実際の使用状況に近いテストができる。

サンプルソース
void main() {
  testWidgets('App should work end-to-end', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyApp());

    // Interact with widgets and test app behavior.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    expect(find.text('New Item'), findsOneWidget);
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TodoListPage(),
    );
  }
}

ユニットテスト (Unit Tests)

個々の関数やメソッドが期待どおりに動作するかを確認できるテスト。
主にビジネスロジックやデータ処理のテストに使用される。

サンプルソース
void main() {
  test('String should be reversed', () {
    expect(reverseString('Hello'), 'olleH');
  });
}

String reverseString(String str) {
  return str.split('').reversed.join();
}

シンプルなテストケースの作成と実行方法

テストファイル

// test/my_test.dart

import 'package:flutter_test/flutter_test.dart';

void main() {
  test('Addition test', () {
    expect(add(2, 3), 5);
  });

  test('Subtraction test', () {
    expect(subtract(5, 3), 2);
  });
}

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

int subtract(int a, int b) {
  return a - b;
}

テストの実行

ターミナルで以下のコマンドを実行すると、テストを実行できる。

$ flutter test
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?