반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ios
- datetime
- list
- GitHub
- GetX
- 라이언
- M1
- error
- database
- swift
- Git
- xcode
- react
- wrap
- sqflite
- 춘식
- 카카오
- 간단리뷰
- 플러터
- listview
- AppBar
- visualstudiocode
- AppleSilicon
- VSCode
- 데스크테리어
- Flutter
- Android
- 내돈내산
- TextField
- 데스크셋업
Archives
- Today
- Total
welcome to my blog
[Flutter] 단위/위젯테스트 코드 정리 본문
728x90
플러터에서 지원하는 테스트 종류는 총 3가지로
- 단위테스트
- 위젯테스트
- 통합테스트
이다.
이번 게시글에서는 1번과 2번을 다루겠다.
참고) 특정 위젯을 찾으려면 find 를 이용한다. ex) find.text('apply');
- finder 객체 함수는 (https://api.flutter.dev/flutter/flutter_test/CommonFinders-class.html) 참고 (text, key, icon 등등 으로 위젯을 찾을 수 있음)
1. 단위테스트
- test 라이브러리를 종속성에 추가(pubspec.yaml 에 직접 입력 혹은 명령어로 추가)
flutter pub add test --dev
- 기본구조
import 'package:test/test.dart'; import 'package:unit_test/counter.dart'; void main() { test('Counter value should be incremented', () { final counter = Counter(); counter.increment(); expect(counter.value, 1);}); }
test 라이브러리 import
test 함수의 첫번째 인자에 description 작성
미리 작성해둔 Counter()라는 클래스의 객채 생성
(counter.increment() -> counter의 value 값 1 증가하는 함수)
expect로 예상 결과값과 비교 --> counter.value와 1이 같은지 비교
2. 위젯테스트
- 테스트 파일은 'test' 디렉토리 내부에 생성하고, 파일명은 마지막에 '_test.dart' 로 끝나도록 네이밍 한다.
- 기본 구조 :
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('ApplyView Button Test', (WidgetTester tester) async {
await tester.pumpWidget(MyWidget());
final titleFinder = find.text("apply");
expect(titleFinder, findsOneWidget);
});
}
flutter_test 라이브러리를 사용한다.
testWidgets :
- This function uses the test function in the test package to register the given callback as a test.
- The callback, when run, will be given a new instance of WidgetTester.
- The find object provides convenient widget Finders for use with the WidgetTester.
- 주어진 콜백을 테스트로 등록하기 위한 테스트 패키지 함수
- 콜백이 실행되고 WidgetTester의 새 인스턴스가 주어진다
- finder 객체는 WidgetTester와 함께 사용할 수 있는 편리한 위젯인 Finder를 제공한다.
WidgetTester :
- 위젯 및 테스트 환경과 프로그래밍 방식으로 상호 작용하는 클래스
- 첫번째 인자는 description으로 어떤 테스트인지 간단하게 설명을 남긴다.
- 객체 속성 몇가지 정리
- testDescription : testWidgets 함수의 첫번째 매개변수인 description 반환
print(tester.testDescription);
- getSize : size를 가져온다
print(tester.getSize(find.text('apply'))); //apply라는 이름을 가진 widget의 size를 반환 --> Text 위젯의 사이즈만 가져옴 나는 apply라는 text를 가진 버튼 자체의 크기를 가져오고 싶다면? print(tester.getSize(find.widgetWithText(TextButton, 'apply'))); //'apply'라는 Text의 child를 가지고 있는 TextButton의 객체를 찾아서 사이즈를 반환함
- tap : 해당 위젯의 중앙을 클릭한다
await tester.tap(find.text("apply")); //apply라는 text를 가진 위젯을 클릭 await tester.tap(find.widgetWithText(TextButton, 'apply')); //apply라는 text를 가진 TextButton을 클릭
- pump :
- Triggers a frame after duration amount of time. 일정시간 후에 프레임을 트리거 -> 리빌드
await tester.pump(); //변경된 위젯만 트리거
- Triggers a frame after duration amount of time. 일정시간 후에 프레임을 트리거 -> 리빌드
- pumpWidget :
- Renders the UI from the given widget. 주어진 위젯으로부터 UI를 렌더링
await tester.pumpWidget(MyWidget()); //최상위 트리부터 다시 트리거
- Renders the UI from the given widget. 주어진 위젯으로부터 UI를 렌더링
- byIcon :
- icon으로 검색
final icon = find.byIcon(Icons.check); expect(icon, findsWidgets);
- icon으로 검색
- allElements.toList() :
- 현재 등록된 트리 항목들을 보여줌 (tree에 제대로 등록되어있나 확인할때 유용)
print(tester.allElements.toList());
- testDescription : testWidgets 함수의 첫번째 매개변수인 description 반환
예시)
group('group test', () {
testWidgets('make MaterialApp widget ', (WidgetTester tester) async {
//home에는 미리 작성해둔 widget 입력 MyStateView -> Scaffold 리턴함
const rootWidget = MaterialApp(
title: 'material',
home: MyStateView(),
);
//pumpWidget의 전달인자로 MaterialApp 을 전달해야 함
await tester.pumpWidget(rootWidget);
//'back'이라는 텍스트를 가진 위젯을 찾음
final backBtn = find.text('back');
//위에서 찾은 버튼이 하나있는지 확인
expect(backBtn, findsOneWidget);
});
});
명령어로 테스트 실행하기
flutter test [테스트파일경로]/[테스트파일이름].dart
ex) flutter test test/unit.dart
https://pub.dev/packages/test/install
https://flutter-ko.dev/docs/cookbook/testing/unit/introduction
https://flutter-ko.dev/docs/testing
https://api.flutter.dev/flutter/flutter_test/testWidgets.html
https://api.flutter.dev/flutter/flutter_test/WidgetTester-class.html
https://api.flutter.dev/flutter/flutter_test/CommonFinders-class.html
728x90
반응형
'Flutter' 카테고리의 다른 글
[Flutter] error: Try launching Xcode and selecting "Product > Run" to fix the problem (0) | 2021.12.27 |
---|---|
[Flutter] androidstudio memory setting (0) | 2021.12.20 |
[Flutter] 자동완성 단축키 (0) | 2021.12.16 |
[Flutter] DropdownButton (0) | 2021.12.10 |
[Flutter] android release build 앱빌드하기 (0) | 2021.12.06 |