flutter
Flutter 자동화 테스트 함수 정리
이나주니
2025. 4. 28. 11:24
반응형
기본 테스트 함수
setUp 각 테스트 시작 전에 실행할 코드 setUp(() { 초기화 코드 });
test 하나의 단위 테스트를 작성할 때 사용 test('2 + 3은 5여야 해', () { expect(2 + 3, 5); });
group 여러 테스트를 논리적으로 묶을 때 사용 group('수학 계산', () { test(...); test(...); });
등등
검증 함수
expect(actual, matcher) 결과(actual)가 기대(matcher)와 일치하는지 확인 expect(2 + 3, equals(5));
ex)
// 특정 위젯 있는지 체크
final heroFinder = find.byKey(const Key('work_out_level'));
expect(heroFinder, findsOneWidget);
expectLater(actual, matcher) 비동기 코드 결과를 나중에 기대할 때 사용 await expectLater(stream, emitsInOrder([1, 2, 3]));
matcher - expect 함수 안에서 쓰는 다양한 비교 방법들
equals(value) 값이 정확히 일치해야 함 expect(1 + 1, equals(2));
isNot(equals(value)) 값이 일치하지 않아야 함 expect(1 + 1, isNot(equals(3)));
isNull null인지 확인 expect(obj, isNull);
isNotNull null이 아닌지 확인 expect(obj, isNotNull);
contains(substring) 문자열이나 리스트 안에 포함되는지 확인 expect('flutter', contains('flut'));
startsWith(prefix) 특정 문자열로 시작하는지 expect('hello', startsWith('he'));
endsWith(suffix) 특정 문자열로 끝나는지 expect('hello', endsWith('lo'));
greaterThan(value) 값이 특정 값보다 큰지 expect(10, greaterThan(5));
lessThan(value) 값이 특정 값보다 작은지 expect(2, lessThan(5));
greaterThanOrEqualTo(value) 크거나 같은지 expect(5, greaterThanOrEqualTo(5));
lessThanOrEqualTo(value) 작거나 같은지 expect(5, lessThanOrEqualTo(5));
throwsException 예외가 발생하는지 확인 expect(() => throw Exception(), throwsException);
throwsA(TypeMatcher) 특정 타입의 예외가 발생하는지 확인 expect(() => throw FormatException(), throwsA(isA<FormatException>()));
비동기 테스트 관련
async/await 비동기 작업 테스트할 때 test('Future 테스트', () async { final result = await Future.value(42); expect(result, 42); });
expectLater Future, Stream 같은 비동기 결과를 테스트할 때 await expectLater(stream, emitsInOrder([1, 2, 3]));
completes Future가 성공적으로 끝나는지 확인 expect(Future.value('ok'), completes);
emits Stream이 특정 값을 방출하는지 expectLater(stream, emits(1));
emitsInOrder Stream이 순서대로 값을 방출하는지 expectLater(stream, emitsInOrder([1, 2, 3]));
Widget Test 전용 함수 (WidgetTester)
testWidgets 위젯(UI)을 테스트하는 기본 함수 testWidgets('버튼 테스트', (tester) async { ... });
tester.pumpWidget(widget) 위젯을 테스트 환경에 띄우기 await tester.pumpWidget(MyApp());
tester.tap(finder) 버튼 클릭 시뮬레이션 await tester.tap(find.text('Login'));
tester.enterText(finder, text) 텍스트필드에 입력하기 await tester.enterText(find.byType(TextField), 'hi');
tester.pump() UI 프레임 업데이트 (setState 반영) await tester.pump();
tester.pumpAndSettle() 애니메이션 끝날 때까지 기다리기 await tester.pumpAndSettle();
find.byType(Type) 위젯 타입으로 찾기 find.byType(TextField)
find.text('텍스트') 특정 텍스트를 가진 위젯 찾기 find.text('Submit')
find.byKey(Key('key')) 키로 위젯 찾기 find.byKey(Key('myButton'))
분리후 처리
실행 방법
flutter test 또는 간편실행 버튼
테스트 돌린 후 성공 화면 예시
00:00 +3: All tests passed!
총 3개 테스트가 성공했다는 뜻
정리
test / group / setUp 등으로 구조를 만듬
expect / expectLater로 결과를 검증
matcher로 다양한 비교
비동기/위젯 테스트는 별도 async 처리
반응형