본문 바로가기

Flutter

dart 유닛 테스트

1. 'test' package를 test dependency 에 추가

'test' package (테스트 패키지)

Dart 에서 테스트를 작성하기 위한 핵심 기능을 제공. 테스트 패키지를 이용해 테스트 케이스를 작성하는 것이 가장 좋은 방법이다.

 

'test' package 추가

- terminal

> flutter pub add test --dev

위 명령어를 termial 입력하면, pubspec.yaml 의 dev_dependencies 에 추가된다.

 

 

- pubspec.yaml

dev_dependencies:
  test: <latest_version>

 pubspec.yaml 파일에 직접 입력할 수 있다. latest_version 에는 최신 버전을 입력한다. 글을 작성하는 현재 test 패키지의 최신버전은 1.16.5 이다.

pubspec.yaml

 

2. 테스트 할 Class 작성

lib/counter.dart 에 아래 내용을 작성한다.

class Counter {
  int value = 0;

  void increment() => value++;

  void decrement() => value--;
}

 

3. Test 케이스 작성

test/counter_test.dart에 테스트 케이스를 작성한다.

 

test() 메소드에는 description과 실행할 body 함수를 입력한다.

void test (dynamic description, dynamic body())

자세한 내용 : https://pub.dev/documentation/test_core/latest/test_core.scaffolding/test.html

 

 

Counter 클래스의 increment() 메소드를 호출하면 value 값이 1 증가하는지 확인한다.

given-when-then 패턴으로 테스트 케이스를 작성한다.

 

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

void main (){
  test('Counter value should be incremented', () {
    //given
    final counter = Counter();
    int expected = counter.value + 1;

    //when
    counter.increment();

    //then
    expect(counter.value, expected);
  });
}

 

given-when-then 패턴

 

given

- 테스트를 위해 준비하는 과정. Counter() 클래스를 선언하고, 예상되는 결과값을 설정한다.

 

when

- 실제로 메소드를 동작하는 과정

 

then

- 테스트를 검증하는 과정. 예상한 값과, 실제 실행을 통해 나온 값을 검증한다.

 

 

4. 'group' 으로 Test case 그룹화

연관된 테스트 케이스를 group 으로 묶어서 관리할 수 있다.

 

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

void main (){
  group('Counter', (){
    test('value should start at 0', () {
      //given
      const expected = 0;

      //when

      //then
      expect(Counter().value, expected);
    });

    test('value should be incremented', () {
      //given
      final counter = Counter();
      const expected = 1;

      //when
      counter.increment();

      //then
      expect(counter.value, expected);
    });

    test('value should be decremented', () {
      //given
      final counter = Counter();
      const expected = -1;

      //when
      counter.decrement();

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

 

 

5. Terminal 에서 실행

> flutter test test/counter_test.dart

테스트 결과

 

'Flutter' 카테고리의 다른 글

test_package.expect() 분석  (0) 2021.07.05
Flutter Widget Test  (0) 2021.07.04
Null Safety  (0) 2021.06.02