Flutter Testing

[Flutter] 단위 테스트 (Unit Test) 해보기

개발자 제이오 2022. 2. 9. 06:33

안녕하세요, 개발자 제이오입니다.

오늘은 Flutter에서 단위 테스트를 실행해 보도록 하겠습니다.

개발환경: VSCode


1. Test 의존성 추가하기

제일 먼저 pubspec.yaml 파일에서 의존성을 추가해줄건데요

vscode에서 플러터 프로젝트를 생성하셨다면 기본적으로 의존성이 주입되있습니다.

dev_dependencies:
  flutter_test:
    sdk: flutter

 만약 의존성 주입이 안되어있다면 아래와 같이 작성해주시면 됩니다.

dev_dependencies:
  test: <latest_version>

<latest_version>에 any를 써주셔도 됩니다.


2. 테스트 파일 생성하기

테스트를 진행하기 앞서 두 가지 테스트 파일을 추가하겠습니다.

  lib/
    counter.dart
  test/
    counter_test.dart

위와 같이 두 가지 파일을 생성해주시면 되는데요, 테스트 파일의 이름은 항상 test로 끝내주셔야 합니다.

couter.dart에

class Counter {
  int value = 0;

  void increment() => value++;

  void decrement() => value--;
}

위의 클래스를 입력해주시면 준비 완료입니다.


3.  클래스 테스트를 위한 test 코드 작성하기

이제 counter_test.dart에 테스트 케이스를 작성해주겠습니다.

import 'package:flutter_test/flutter_test.dart';
import 'package:temp/counter.dart';

void main() {
  test('Counter의 value가 증가할 것이다.', () {
    final counter = Counter();

    counter.increment();

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

test 메소드는 항상 main 안에 적어주셔야 합니다.

 

각각의 메소드를 간략하게 설명하겠습니다.

test(): 해당 테스트에 대한 설명과 함께 테스트를 실행합니다. (설명, 테스트 코드)

expect(): 해당 테스트의 결과가 올바른지 체크합니다. (실제 값, 기대 값)

테스트 실행 결과

테스트를 실행하는 방법은 main 전체를 실행하고 싶으면 메인 함수위의 Run이나 Debug를 클릭하면 되고

각각의 test별로 실행하고 싶다면 아래 test버튼 위의 Run이나 Debug를 클릭하시면 됩니다.

단축키는 F5(디버깅 시작) OR Control + F5(디버깅 없이 시작)입니다.

 

아래의 테스트 결과가 디버그 콘솔에 출력됩니다.


이번에는 실패하는 테스트 케이스를 한번 작성해보겠습니다.

import 'package:flutter_test/flutter_test.dart';
import 'package:temp/counter.dart';

void main() {
  test('Counter의 value가 증가할 것이다.', () {
    final counter = Counter();

    counter.increment();

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

예상되는 기대값을 0으로 바꾸어 보고 테스트를 실행하였습니다.

실패한 테스트 케이스

테스트를 실행하면 아래 디버그 콘솔에 오류 메시지가 표시됩니다.

마지막으로 테스트를 그룹 단위로 묶어서 실행해보겠습니다.


import 'package:flutter_test/flutter_test.dart';
import 'package:temp/counter.dart';

void main() {
  group('Counter', () {
    test('Counter의 value는 0이어야 한다.', () {
      expect(Counter().value, 0);
    });

    test('Counter의 value는 1이어야 한다.', () {
      final counter = Counter();

      counter.increment();

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

    test('Counter의 value는 -1이어야 한다.', () {
      final counter = Counter();

      counter.decrement();

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

위와 같이 group 메소드를 이용하여 테스트를 그룹지어 실행할 수 있습니다.

그룹 테스트 케이스


이상입니다!