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 처리

 

 

반응형