ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Flutter] 유닛 테스트 해보기
    카테고리 없음 2024. 5. 25. 18:02
    728x90

    플러터에서는 어떤 테스트 방법이 있을까?

    플러터에서는 크게 유닛 테스트, 위젯 테스트, 통합 테스트로 이루어져 있습니다. 
    이번 글에선 유닛 테스팅을 알아보도록 하겠습니다. 

    Unit test

    유닛 테스팅은 메소트나 클래스처럼 작은 단위 즉 메서드, 클래스 같은 작은 단위를 테스트할 때 쓰입니다.

    1.1 Unit Testing - 다트 기본 테스트 프레임워크

    우선 test 라이브러리를 추가해 주세요.

    pubspec.yaml

    dev_dependencies:
      test: <latest_version>

     

    test 폴더에다가 테스트 파일(testing_test.dart)을 만들어주세요.

    파일 이름은 항상 test로 끝나야 하며 main 함수에서 실행되어야 합니다.

    test/testing.dart

    void main() {
      test('test1', () {
        expect(1 * 1, 1);
      });
    }

    간단한 예제를 만들어보았습니다. 테스트의 실행은 해당 파일에 들어가 debug->start debugging으로 실행해 볼 수 있습니다.

    테스트 코드는 크게 test() 함수와 expect() 함수로 되어 있습니다.

    test()는 테스트를 실행할 때 쓰이는 함수고, expect()는 테스트 실행값과 기댓값을 비교하는 함수입니다.

    이렇게 기대하는 값과 실제 값이 같다면 테스트가 통과되는 모습을 볼 수 있습니다. 

    다음은 두 번째 예제입니다. 이 테스트는 소문자로 잘 바뀌는지 확인해 보는 테스트입니다.

    void main() {
      test("lowercase", () {
        String hi = "hello";
        expect(hi.toLowerCase(), "hello");
      } );
    }

    이번에도 무사히 통과되었습니다.

    그럼 기본적으로 알아야 하는 test의 기본적인 함수에 대해서 알아보겠습니다.

    다트의 테스트 함수

    • test
      • 테스트에 대한 설명과 실제 테스트 코드를 적습니다.
      • 시간제한(timeout)이나 테스트 환경 (브라우저, OS) 등도 적어줄 수 있습니다.
    • expect
      • expect(실제값, 기댓값)
      • 테스트의 기댓값과 실제값을 비교합니다..
    • setup
      • 테스트를 시작하기 전에 설정을 해줍니다.
      • 테스트 단위 하나마다 실행됩니다. ( test() 함수 하나가 테스트 단위 하나예요. 한 파일에 여러 test() 가 있으면 여러 번 실행됩니다. )
    • setupAll
      • 테스트 시작하기 전에 설정을 해줍니다.
      • 파일 하나에 한 번만 실행됩니다. (데이터 베이스 설정할 때 쓰기 좋겠죠)
    • teardown
      • 테스트를 마치고 할 작업을 정해줍니다.
      • 테스트 단위 하나마다 실행됩니다 ( setup() 함수랑 동일합니다 )
    • teardownAll()
      • 테스트를 마치고 할 작업을 정해줍니다.
      • 파일 하나에 한번만 실행됩니다.

    다음은 group() 함수로 여러 테스트를 묶어서 테스트해보겠습니다.

    class Calculator {
      int add(int x, int y) => x + y;
    
      int minus(int x, int y) => x - y;
    
      int square(int x, int y) => x * x;
    }
    
    void main() {
      group("calculator", () {
        Calculator calculator = Calculator();
        test("add", () => expect(calculator.add(10, 20), 30));
        test("minus", () => expect(calculator.minus(30, 20), 10));
        test('square', () => expect(calculator.square(2, 2), 4));
      });
    }
    

    group()으로 묶은 세 가지의 테스트를 모두 통과했습니다.

    728x90
Designed by Tistory.