티스토리 뷰

Flutter/테스팅

플러터] 단위 테스팅 소개

철철박사 2024. 9. 21. 23:31
반응형

앱에 더 많은 기능을 추가하거나 기존 기능을 변경할 때 어떻게 앱이 계속 정상적으로 작동하는지 확인할 수 있을까요? 바로 테스트를 작성함으로써 가능합니다.

 

단위 테스트는 단일 함수, 메서드 또는 클래스의 동작을 확인하는 데 유용합니다. test 패키지는 단위 테스트 작성을 위한 핵심 프레임워크를 제공하고, flutter_test 패키지는 위젯 테스트를 위한 추가 도구를 제공합니다.

 

이 레시피에서는 test 패키지에서 제공하는 주요 기능을 다음 단계들을 통해 시연합니다:

  1. test 또는 flutter_test 의존성 추가
  2. 테스트 파일 생성
  3. 테스트할 클래스 생성
  4. 클래스에 대한 테스트 작성
  5. 여러 테스트를 그룹으로 결합
  6. 테스트 실행

1. test 의존성 추가

test 패키지는 Dart에서 테스트를 작성하는 기본 기능을 제공합니다. 웹, 서버 및 플러터 앱에서 사용되는 패키지를 작성할 때 최적의 방법입니다.

 

test 패키지를 개발 의존성으로 추가하려면 flutter pub add 명령어를 실행하세요:

flutter pub add dev:test

2. 테스트 파일 생성

이 예시에서는 counter.dartcounter_test.dart 두 개의 파일을 만듭니다.

counter.dart 파일은 테스트하려는 클래스를 포함하며, lib 폴더에 위치합니다. counter_test.dart 파일은 테스트 자체를 포함하며 test 폴더에 위치합니다.

 

일반적으로 테스트 파일은 Flutter 애플리케이션 또는 패키지의 루트에 있는 test 폴더 안에 있어야 합니다. 테스트 파일 이름은 _test.dart로 끝나야 하며, 이는 테스트 실행기가 테스트를 찾을 때 사용하는 규칙입니다.

 

완성된 폴더 구조는 다음과 같습니다:

counter_app/
  lib/
    counter.dart
  test/
    counter_test.dart

3. 테스트할 클래스 생성

다음으로, 테스트할 "단위"가 필요합니다. "단위"는 함수, 메서드 또는 클래스를 의미합니다. 이 예제에서는 lib/counter.dart 파일에 Counter 클래스를 만듭니다. 이 클래스는 0에서 시작하는 값을 증가시키거나 감소시키는 역할을 합니다.

class Counter {
  int value = 0;

  void increment() => value++;

  void decrement() => value--;
}

참고: 이 튜토리얼은 간단하게 하기 위해 "테스트 주도 개발"(Test Driven Development) 방식을 따르지 않습니다. 만약 그 스타일의 개발에 익숙하다면 언제든지 그 방식을 사용할 수 있습니다.

4. 클래스에 대한 테스트 작성

counter_test.dart 파일에서 첫 번째 단위 테스트를 작성합니다. 테스트는 상위 수준의 test 함수를 사용해 정의되며, 결과가 올바른지 확인하려면 expect 함수를 사용합니다. 이 두 함수는 모두 test 패키지에서 제공됩니다.

// test 패키지와 Counter 클래스를 가져옵니다
import 'package:counter_app/counter.dart';
import 'package:test/test.dart';

void main() {
  test('Counter 값이 증가해야 합니다', () {
    final counter = Counter();

    counter.increment();

    expect(counter.value, 1);
  });
}

5. 여러 테스트를 그룹으로 결합하기

관련된 테스트들을 한 번에 실행하고 싶다면, flutter_test 패키지의 group 함수를 사용하여 테스트들을 그룹화할 수 있습니다. 그룹으로 묶은 후에는, 하나의 명령어로 해당 그룹의 모든 테스트를 실행할 수 있습니다.

import 'package:counter_app/counter.dart';
import 'package:test/test.dart';

void main() {
  group('초기화, 증가, 감소 테스트', () {
    test('value는 0에서 시작해야 합니다', () {
      expect(Counter().value, 0);
    });

    test('value가 증가해야 합니다', () {
      final counter = Counter();

      counter.increment();

      expect(counter.value, 1);
    });

    test('value가 감소해야 합니다', () {
      final counter = Counter();

      counter.decrement();

      expect(counter.value, -1);
    });
  });
}

6. 테스트 실행하기

이제 Counter 클래스와 그에 대한 테스트를 작성했으므로, 테스트를 실행할 수 있습니다.

IntelliJ 또는 VSCode에서 테스트 실행하기

IntelliJ와 VSCode의 Flutter 플러그인은 테스트 실행을 지원합니다. 테스트를 작성하는 동안 이 방법이 가장 빠른 피드백 루프를 제공하며, 브레이크포인트를 설정할 수 있어 유용합니다.

IntelliJ

  1. counter_test.dart 파일을 엽니다.
  2. Run > Run 'tests in counter_test.dart'를 선택합니다. 또는 플랫폼에 맞는 단축키를 사용할 수 있습니다.

VSCode

  1. counter_test.dart 파일을 엽니다.
  2. Run > Start Debugging을 선택합니다. 또는 플랫폼에 맞는 단축키를 사용할 수 있습니다.

터미널에서 테스트 실행하기

터미널에서 모든 테스트를 실행하려면, 프로젝트의 루트 디렉토리에서 다음 명령어를 실행하세요:

flutter test test/counter_test.dart

하나의 그룹에 넣은 모든 테스트를 실행하려면, 다음 명령어를 실행하세요:

flutter test --plain-name "초기화, 증가, 감소 테스트"

이 예시는 5번 섹션에서 만든 그룹을 사용한 것입니다.

단위 테스트에 대해 더 알고 싶다면, 다음 명령어를 실행해 보세요:

flutter test --help
반응형

'Flutter > 테스팅' 카테고리의 다른 글

플러터] Mockito를 사용한 의존성 모킹  (0) 2024.09.21
플러터] 플러터 앱 테스트 개요  (0) 2024.09.21
댓글
공지사항