반응형
위젯 테스트 : https://flutter-ko.dev/docs/cookbook/testing/widget/introduction
a. flutter_test 의존성 추가
근데 기본적으로 의존성이 걸려있어서 따로 추가할 필요가 없다.
dev_dependencies:
flutter_test:
sdk: flutter
b. 테스트할 위젯 생성
class MyWidget extends StatelessWidget {
final String title;
final String message;
const MyWidget({
Key key,
@required this.title,
@required this.message,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Center(
child: Text(message),
),
),
);
}
}
c. testWidgets 생성
크게 다음 과정을 따라가며 테스트를 진행한다.
- WidgetTest가 제공하는 pumpWidget() 메서드로 주어진 위젯을 빌드하고 렌더링한다.
- Finder를 통해 나의 위젯을 찾는다.
- Matcher로 위젯을 verify한다.
테스트 예시)
void main() {
testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
// Create the widget by telling the tester to build it.
await tester.pumpWidget(MyWidget(title: 'T', message: 'M'));
// Create the Finders.
final titleFinder = find.text('T');
final messageFinder = find.text('M');
// Use the `findsOneWidget` matcher provided by flutter_test to verify
// that the Text widgets appear exactly once in the widget tree.
expect(titleFinder, findsOneWidget);
expect(messageFinder, findsOneWidget);
});
}
기타 도움이 될 자료들
- pump(): 리빌드 시 사용 https://api.flutter.dev/flutter/flutter_test/TestWidgetsFlutterBinding/pump.html
- pumpAndSettle(): 어떠한 프레임도 더이상 스케줄링되지 않을 때까지 Pump를 반복(모든 애니메이션이 완료될 때까지 기다림)
- Finder 자세히 : https://flutter-ko.dev/docs/cookbook/testing/widget/finders
- 플러터가 제공하는 다양한 Matcher들
findsOneWidget : 위젯이 1개 존재함
findsNothing : 위젯이 존재하지 않음
findsWidgets : 1개 또는 2개 이상의 위젯이 존재함
findsNWidgets : 특정 N개의 위젯이 존재함
댓글