[flutter] 플러터(Flutter)에서 유닛 테스트(Unit Test) 작성하기

플러터(Flutter)에서는 앱의 안정성과 품질을 보장하기 위해 유닛 테스트(Unit Test)를 작성할 수 있습니다. 유닛 테스트는 앱의 각 부분을 독립적으로 테스트하고 각각의 유닛이 제대로 작동하는지 확인하는 것입니다. 이번 블로그 포스트에서는 플러터에서 유닛 테스트를 작성하는 방법에 대해 알아보겠습니다.

1. 유닛 테스트 준비하기

유닛 테스트를 작성하기 전에 플러터 프로젝트에서 테스트를 수행할 수 있는 환경을 설정해야 합니다. 플러터 프로젝트의 test 폴더에 widget_test.dart 파일을 생성하고 아래와 같이 기본 코드를 작성합니다.

import 'package:flutter_test/flutter_test.dart';

void main() {
  test('example test', () {
    expect(2 + 2, equals(4));
  });
}

위의 코드에서 test 메서드는 테스트를 수행하는 함수로, 첫 번째 인자로 테스트에 대한 설명을, 두 번째 인자로 테스트 로직을 넘겨줍니다. expect 메서드는 테스트 결과를 검증하는 함수로, 첫 번째 인자로 예상 결과를, 두 번째 인자로 실제 결과를 전달합니다. 만약 예상 결과와 실제 결과가 일치하지 않으면 테스트가 실패합니다.

2. 유닛 테스트 실행하기

유닛 테스트를 실행하려면 다음 명령어를 터미널에서 실행합니다.

flutter test

위 명령어를 실행하면 test 폴더 내의 모든 테스트 파일이 실행되고 테스트 결과가 출력됩니다. 만약 테스트가 성공하면 All tests passed!라는 메시지가 출력됩니다.

3. 실제 유닛 테스트 예제

플러터에서는 위젯을 테스트하는 것도 가능합니다. 예를 들어, 다음과 같이 버튼 위젯의 동작을 테스트하는 코드를 작성할 수 있습니다.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('button widget test', (WidgetTester tester) async {
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          body: Center(
            child: ElevatedButton(
              child: Text('Submit'),
              onPressed: () {},
            ),
          ),
        ),
      ),
    );

    final buttonFinder = find.byType(ElevatedButton);
    expect(buttonFinder, findsOneWidget);

    final buttonTextFinder = find.text('Submit');
    expect(buttonTextFinder, findsOneWidget);

    await tester.tap(buttonFinder);
    await tester.pump();

    // 테스트 결과 확인
  });
}

위의 코드에서 testWidgets 메서드를 사용하여 위젯 테스트를 작성했습니다. pumpWidget 메서드는 위젯을 화면에 그려주는 역할을 합니다. 그리고 find.byType 메서드와 find.text 메서드를 사용하여 특정 위젯을 찾을 수 있습니다. tester.tap 메서드와 tester.pump 메서드를 사용하여 버튼을 탭하고 화면을 갱신할 수 있습니다. 마지막으로, 테스트 결과를 확인하는 코드를 작성할 수 있습니다.

4. 추가 리소스