티스토리 뷰
앱에 더 많은 기능을 추가하거나 기존 기능을 변경할 때 어떻게 앱이 계속 정상적으로 작동하는지 확인할 수 있을까요? 바로 테스트를 작성함으로써 가능합니다.
단위 테스트는 단일 함수, 메서드 또는 클래스의 동작을 확인하는 데 유용합니다. test
패키지는 단위 테스트 작성을 위한 핵심 프레임워크를 제공하고, flutter_test
패키지는 위젯 테스트를 위한 추가 도구를 제공합니다.
이 레시피에서는 test
패키지에서 제공하는 주요 기능을 다음 단계들을 통해 시연합니다:
test
또는flutter_test
의존성 추가- 테스트 파일 생성
- 테스트할 클래스 생성
- 클래스에 대한 테스트 작성
- 여러 테스트를 그룹으로 결합
- 테스트 실행
1. test 의존성 추가
test
패키지는 Dart에서 테스트를 작성하는 기본 기능을 제공합니다. 웹, 서버 및 플러터 앱에서 사용되는 패키지를 작성할 때 최적의 방법입니다.
test
패키지를 개발 의존성으로 추가하려면 flutter pub add
명령어를 실행하세요:
flutter pub add dev:test
2. 테스트 파일 생성
이 예시에서는 counter.dart
와 counter_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
counter_test.dart
파일을 엽니다.Run
>Run 'tests in counter_test.dart'
를 선택합니다. 또는 플랫폼에 맞는 단축키를 사용할 수 있습니다.
VSCode
counter_test.dart
파일을 엽니다.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 |