Dart 테스팅(Testing)

Dart 테스팅(Testing)

소프트웨어 테스팅은 앱 개발에서 중요한 부분이에요. 출시 전에 앱이 제대로 동작하는지 확인해 주거든요. 이 Dart 테스팅 가이드에서는 여러 종류의 테스팅을 소개하고, Flutter·웹·서버 사이드 앱과 스크립트를 테스트하는 법을 배울 곳을 알려 드릴게요.

출처: Testing

본문

테스트는 커맨드라인에서 dart test 명령으로 실행할 수 있어요(Flutter 앱은 flutter test).

테스팅의 종류(Kinds of testing)

Dart 테스팅 문서는 여러분이 익숙할 수 있는 여러 테스팅 종류 중에서 세 가지에 집중해요: 단위(unit), 컴포넌트(component), 그리고 엔드투엔드(end-to-end)(통합 테스팅의 한 형태) 테스팅이에요. 테스팅 용어는 다양하지만, Dart 기술을 쓸 때 마주칠 가능성이 높은 용어와 개념은 다음과 같아요.

  • **단위 테스트(Unit tests)**는 함수, 메서드, 클래스 같은 테스트 가능한 소프트웨어의 가장 작은 조각을 검증하는 데 집중해요. 테스트 스위트에는 다른 종류의 테스트보다 단위 테스트가 더 많아야 해요.
  • 컴포넌트 테스트(Component tests)(Flutter에서는 widget 테스트라고 불러요)는 보통 여러 클래스로 구성된 컴포넌트가 기대대로 동작하는지 검증해요. 컴포넌트 테스트는 흔히 사용자 동작, 이벤트를 흉내 내고 레이아웃을 수행하며 하위 컴포넌트를 인스턴스화할 수 있는 mock 객체가 필요해요.
  • **통합·엔드투엔드 테스트(Integration and end-to-end tests)**는 앱 전체 또는 앱의 큰 덩어리의 동작을 검증해요. 통합 테스트는 일반적으로 시뮬레이션 또는 실제 기기, 웹의 경우 브라우저에서 실행되며 두 부분으로 구성돼요: 앱 자체와, 앱을 시험하는 테스트 앱이에요. 통합 테스트는 흔히 성능을 측정하므로 테스트 앱은 테스트 대상 앱과 다른 기기나 OS에서 실행되는 경우가 많아요.

전반적으로 유용한 라이브러리(Generally useful libraries)

테스트는 코드가 대상으로 하는 플랫폼(예: Flutter, 웹, 서버 사이드)에 부분적으로 의존하지만, 다음 패키지들은 Dart 플랫폼 전반에 걸쳐 유용해요.

package:test

Dart에서 테스트를 작성하는 표준 방법을 제공해요. test 패키지를 사용하면 다음을 할 수 있어요.

  • 단일 테스트 또는 테스트 그룹을 작성.
  • @TestOn 애노테이션을 사용해 테스트를 특정 환경에서만 실행되도록 제한.
  • 동기 테스트를 작성하듯 비동기 테스트 작성.
  • @Tag 애노테이션으로 테스트 태깅. 예를 들어 일부 테스트에 대해 커스텀 설정을 만들거나, 완료하는 데 더 많은 시간이 필요한 테스트를 식별하는 태그를 정의할 수 있어요.
  • 여러 파일 또는 패키지 전체에 걸쳐 태그된 테스트를 구성하는 dart_test.yaml 파일 생성.

package:mockito

고정 시나리오에서 쉽게 구성할 수 있는 mock 객체를 만들고, 테스트 대상 시스템이 mock 객체와 기대한 방식으로 상호 작용하는지 검증하는 방법을 제공해요. package:test와 package:mockito를 둘 다 쓰는 예시는 mockito 패키지의 International Space Station API 라이브러리와 그 단위 테스트를 참고하세요.

Flutter 테스팅

Flutter 앱 테스팅을 더 배우려면 다음 자료를 활용하세요.

  • Testing Flutter Apps — Flutter 앱에서 단위, widget, 통합 테스트를 수행하는 방법.
  • flutter_test — package:test 위에 구축된 Flutter용 테스팅 라이브러리.
  • flutter_driver — 실제 기기와 에뮬레이터에서(별도 프로세스로) Flutter 앱을 테스트하는 라이브러리.
  • flutter_gallery — Flutter 갤러리 예제의 소스 코드와 테스트.
  • flutter/dev/manual_tests — Flutter SDK 안의 많은 테스트 예제.

기타 도구와 자료

Dart 애플리케이션을 개발하고 디버깅할 때 다음 자료도 유용할 수 있어요.

IDE

디버깅에 있어서 첫 번째 방어선은 IDE예요. 많은 흔히 쓰이는 IDE에 Dart 플러그인이 존재해요.

Dart DevTools

Dart DevTools는 Dart와 Flutter를 위한 성능 도구 모음이에요. 자세한 내용은 Dart DevTools 문서를 참고하세요.

지속적 통합(Continuous integration)

프로젝트를 빌드하고 모든 커밋 후 테스트를 실행하려면 지속적 통합(CI) 사용을 고려해 보세요. GitHub용 CI 서비스 두 가지는 GitHub ActionsAppVeyor예요.

GitHub Actions에 대해 더 알아보기:

  • Dart 팀이 제공하는 많은 패키지가 GitHub Actions를 사용해요. 예를 들어 markdown 패키지 저장소의 markdown.yaml을 참고하세요. 그 저장소가 Travis CI에서 GitHub Actions로 마이그레이션한 방법을 보려면 PR #353을 확인하세요.

더 알아보기