Flutter - WidgetTest(위젯 테스트) 작성해보기
flutter_test 패키지를 사용하여
widget을 test 하는 방법에 대하여 알아보도록 하겠습니다.
목차
flutter_test package
위젯 클래스를 테스트하려면 flutter_testFlutter SDK와 함께 제공되는 패키지에서 제공하는 몇 가지 추가 도구가 필요합니다.
flutter_test패키지는 위젯을 테스트하기 위해 다음과 같은 도구를 제공합니다
- WidgetTester 구축하고 테스트 환경에서 위젯과 상호 작용할 수 있습니다.
- testWidgets() 함수를 이용하여 일반 test() 함수 대신 사용합니다.
- Finder클래스는 테스트 환경에서 위젯을 검색할 수 있습니다.
- 위젯 특정 Matcher상수 Finder는 테스트 환경에서 위젯이 위젯을 찾거나 여러 위젯을 찾는지 여부를 확인하는 데 도움이 됩니다.
테스트 작성하기
의존성 추가하기
테스트를 작성하기 전 먼저 flutter_test package에 대한 의존성을 추가해야 합니다
pubspec.yaml에 아래와 같이 추가합니다.
dev_dependencies:
flutter_test:
sdk: flutter
테스트 위젯 생성
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),
),
),
);
}
}
testWidgets() 테스트 작성하기
flutter_test package를 사용하여 테스트를 작성합니다.
void main() {
testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
// Test code goes here.
});
}
WidgetTester로 위젯 빌드하기
WidgetTester 가제 공하는 pumpWidget함수로 위젯을 빌드하고 랜더링 합니다.
void main() {
testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
await tester.pumpWidget(MyWidget(title: 'T', message: 'M'));
});
}
Finder로 위젯을 검색하기
commonFinder를 이용하여 위에서 WidgetTester로 생성한 위젯 트리 내의 위젯을 검색할 수 있습니다.
void main() {
testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
await tester.pumpWidget(MyWidget(title: 'T', message: 'M'));
final titleFinder = find.text('T');
final messageFinder = find.text('M');
});
}
Matcher로 위젯 검증하기
Matcher에서 제공하는 상수를 사용하여
해당 위젯이 화면에 나타나는지 확인할 수 있습니다.
void main() {
testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
await tester.pumpWidget(MyWidget(title: 'T', message: 'M'));
final titleFinder = find.text('T');
final messageFinder = find.text('M');
expect(titleFinder, findsOneWidget);
expect(messageFinder, findsOneWidget);
});
}
추가 매처
findsNothing : 위젯이 없는지 확인합니다
findsWidgets : 하나 이상의 위젯이 있는지 확인합니다.
findsNWidgets : 특정 수의 위젯이 있는지 확인합니다.
WidgetTester Class 알아보기
WidgetTester 클래스는??
위젯 및 테스트 환경과 프로그래밍 방식으로 상호작용하는 클래스입니다.
WidgetTester 클래스의 주요 메서드
- pump(..) : 변경된 위젯을 다시 작성합니다. duration을 주어 일정 시간이 지난 후 프레임을 트리거할 수도 있습니다.
await tester.pump();
await tester.pump(Duration(seconds: 1));
- pumpAndSettle(..) : 더 이상 예약된 프레임이 없을 때까지 주어진 duration동안 pump를 반복하여 호출합니다. 기본적으로 모든 애니메이션이 완료될 때까지 기다립니다.
await tester.pumpAndSettle();
- pumpWidget(..) :주어진 위젯을 최상위 트리부터 재구성하여 랜더링 합니다. (MaterialApp or CupertinoApp)등의 MediaQeury.of(context)를 찾을 수 있는 상위 트리가 주어져야 합니다
await tester.pumpWidget(MaterialApp(home: Text("Hello")));
- tab(..) : 주어진 위젯의 중심을 클릭합니다.
expect(tapCount, equals(0));
await tester.tap(find.text('Undo'));
expect(tapCount, equals(1));
WidgetTester 클래스의 전체 메서드
widgetTester class 전체 메서드
method | Description |
createTicker(TickerCallback onTick) → Ticker | 주어진 콜백으로 Ticker를 만듭니다. |
dispatchEvent(PointerEvent event, HitTestResult result) → void | 라이브 테스트 모드에서 바인딩에 의해 발견된 장치 이벤트에 대한 핸들러 |
ensureSemantics() → SemanticsHandle | SementicsHandle을 작성하여 테스트에서 Sementics(의미)를 사용합니다. |
ensureVisible(Finder finder) → Future<void> | 파인더가 지정한 위젯 W와 조상 트리에있는 스크롤 가능한 위젯 S가 주어지면 W가 보이도록 S가 스크롤됩니다. |
enterText(Finder finder, String text) → Future<void> | finder포커스에 의해 지정된 텍스트 입력 위젯을 text제공하고 온 스크린 키보드에서 제공되는 것처럼 입력하십시오 |
getSemantics(Finder finder) → SemanticsNode | finder 에서 첫 번째 결과 의 SemanticsNode 를 찾으려고합니다 |
hitTestOnBinding(Offset location) → HitTestResult | 주어진 위치를 바인딩의 hitTest 로직으로 전달합니다. |
idle() → Future<void> | 응용 프로그램이 유휴 상태 인 것처럼 작동합니다 |
pageBack() → Future<void> | Material Scaffold 또는 CupertinoPageScaffold로 현재 페이지를 닫습니다. |
pump([Duration duration, EnginePhase phase = EnginePhase.sendSemanticsUpdate ]) → Future<void> |
duration일정 시간이 지난 후 프레임을 트리거합니다. 변경된 위젯만을 다시 작성합니다. |
pumpAndSettle([Duration duration = const Duration(milliseconds: 100) EnginePhase phase = EnginePhase.sendSemanticsUpdate, Duration timeout = const Duration(minutes: 10) ]) → Future<int> |
더 이상 예약된 프레임이 없을 때까지 주어진 시간 동안 펌프를 반복해서 호출합니다. 기본적으로 모든 애니메이션이 완료될 때까지 기다립니다. 이러한 방법을 사용하면 빌드 수명주기를 세밀하게 제어할 수 있으며 테스트하는 동안 특히 유용합니다. |
pumpBenchmark(Duration duration) → Future<void> | duration일정 시간이 지난 후 프레임을 트리거 하고 프레임이 그려지 자마자 반환합니다. |
pumpWidget(Widget widget, [ Duration duration, EnginePhase phase = EnginePhase.sendSemanticsUpdate ]) → Future<void> |
지정된에서 UI를 렌더링 합니다 widget 최상위 트리부터 전부 다시 재구성 |
runAsync<T>(Future<T> callback(), { Duration additionalTime: const Duration(milliseconds: 1000) }) → Future<T> | callback실제 비동기 작업을 실행합니다 . |
sendEventToBinding(PointerEvent event, HitTestResult result) → Future<void> | 주어진 포인터 이벤트를 바인딩으로 전달합니다. |
sendKeyDownEvent(LogicalKeyboardKey key, { String platform: 'android' }) → Future<void> | 시스템 채널을 통한 물리적 키 다운 이벤트 전송을 시뮬레이션합니다. |
sendKeyEvent(LogicalKeyboardKey key, { String platform: 'android' }) → Future<void> | 시스템 채널을 통한 물리적 키 다운 및 업 이벤트 전송을 시뮬레이션합니다 |
sendKeyUpEvent(LogicalKeyboardKey key, { String platform: 'android' }) → Future<void> | 시스템 채널을 통한 물리적 키 업 이벤트 전송을 시뮬레이션합니다 |
showKeyboard(Finder finder) → Future<void> | 스크린 키보드가 나타난 것처럼 포커스에 의해 지정된 텍스트 입력 위젯을 제공합니다 . |
takeException() → dynamic | Flutter 프레임 워크에서 가장 최근에 발견 한 예외를 리턴합니다. |
verifyTickersWereDisposed([String when = 'when none should have been' ]) → void | WidgetTester 에 의해 작성된 티커 가 메소드가 호출 될 때 여전히 활성 인 경우 예외를 발생 시킵니다. |
createGesture({int pointer PointerDeviceKind kind: PointerDeviceKind.touch, int buttons: kPrimaryButton }) → Future<TestGesture> | 제스처와 반환 작성 TestGesture의 당신의 통화를 사용하여 동작을 계속하는 데 사용할 수있는 개체 TestGesture의 개체를 |
drag(Finder finder, Offset offset, { int pointer, int buttons: kPrimaryButton, double touchSlopX: kDragSlopDefault double touchSlopY: kDragSlopDefault }) → Future<void> | 위젯 가운데에서 끌기를 시작하여 주어진 오프셋만큼 주어진 위젯을 끌려고 시도합니다 |
dragFrom(Offset startLocation, { Offset offset, { int pointer, int buttons: kPrimaryButton, double touchSlopX: kDragSlopDefault double touchSlopY: kDragSlopDefault }) → Future<void> | 포인터 아래로, 지정된 오프셋만큼 이동 및 포인터 위로 구성된 드래그 동작을 시도합니다 |
element<T extends Element>(Finder finder) → T | 위젯 트리에서 일치하는 요소 |
elementList<T extends Element>(Finder finder) → Iterable<T> | 위젯 트리에서 일치하는 요소 |
firstElement<T extends Element>(Finder finder) → T | 위젯트리에서 일치하는 첫 번째 요소 |
firstRenderObject<T extends RenderObject>(Finder finder) → T | 위젯 트리의 깊이 우선 사전 주문 순회에 따라 첫 번째 일치 위젯의 렌더링 오브젝트입니다. |
firstState<T extends State<StatefulWidget>>(Finder finder) → T | 위젯 트리의 깊이 우선 사전 주문 통과에 따른 첫 번째 일치 상태입니다 |
firstWidget<T extends Widget>(Finder finder) → T | 위젯 트리의 깊이 우선 사전 주문 순회에 따른 첫 번째 일치 위젯 |
fling(Finder finder, Offset offset, double speed, { int pointer, int buttons: kPrimaryButton, Duration frameInterval: const Duration(milliseconds: 16) Offset initialOffset: Offset.zero, Duration initialOffsetDelay: const Duration(seconds: 1) }) → Future<void> | 주어진 위젯의 중심에서 시작하여 주어진 거리를 이동하고 주어진 속도에 도달하는 플링 제스처를 시도합니다. |
lingFrom ( Offset startLocation , Offset offset , double speed , { int pointer , int buttons : kPrimaryButton , Duration frameInterval : const Duration (milliseconds : 16) Offset initialOffset : Offset.zero , Duration initialOffsetDelay : const Duration (seconds : 1) }) → Future<void> | 주어진 위치에서 시작하여 주어진 거리를 이동하고 주어진 속도에 도달하는 플링 제스처를 시도합니다. |
getBottomLeft(Finder finder) → Offset | 주어진 위젯의 왼쪽 하단에있는 점을 반환합니다. 이 포인트는 오브젝트의 적중 테스트 영역 안에 있지 않습니다. |
getBottomRight(Finder finder) → Offset | 주어진 위젯의 오른쪽 아래 지점을 반환합니다. 이 포인트는 오브젝트의 적중 테스트 영역 안에 있지 않습니다. |
getCenter(Finder finder) → Offset | 주어진 위젯의 중심점을 반환합니다. |
getRect(Finder finder) → Rect | 주어진 위젯의 rect를 반환합니다. 위젯의 렌더 객체가 한 번 이상 배치 된 후에 만 유효합니다. |
getSize(Finder finder) → Size | 주어진 위젯의 크기를 반환합니다. 위젯의 렌더 객체가 한 번 이상 배치 된 후에 만 유효합니다. |
getTopLeft(Finder finder) → Offset | 주어진 위젯의 왼쪽 상단에있는 점을 반환합니다. |
getTopRight(Finder finder) → Offset | 주어진 위젯의 오른쪽 상단에있는 점을 반환합니다. 이 포인트는 오브젝트의 적중 테스트 영역 안에 있지 않습니다. |
longPress(Finder finder, { int pointer int buttons: kPrimaryButton }) → Future<void> | 주어진 위젯의 중앙에 노출되어 있다고 가정하여 롱 프래스 |
longPressAt(Offset location, { int pointer int buttons: kPrimaryButton }) → Future<void> | 두 이벤트 사이 에 kLongPressTimeout + kPressTimeout 의 지연으로 지정된 위치에서 포인터 다운 / 포인터 업 시퀀스를 전달 합니다. |
press(Finder finder, { int pointer int buttons: kPrimaryButton }) → Future<TestGesture> | 주어진 위젯의 중앙에 포인터가 노출되었다고 가정하여 클릭 |
renderObject<T extends RenderObject>(Finder finder) → T | 위젯 트리에서 일치하는 위젯의 렌더 객체 |
renderObjectList<T extends RenderObject>(Finder finder) → Iterable<T> | 위젯 트리에서 일치하는 위젯의 렌더링 객체 리스트 |
startGesture(Offset downLocation, { int pointer PointerDeviceKind kind: PointerDeviceKind.touch, int buttons: kPrimaryButton }) → Future<TestGesture> | 특정 지점에서 초기 다운 제스처로 제스처를 만들고 제스처 를 계속하는 데 사용할 수 있는 TestGesture 객체를 반환합니다 |
state<T extends State<StatefulWidget>>(Finder finder) → T | 위젯 트리에서 일치하는 상태 |
stateList<T extends State<StatefulWidget>>(Finder finder) → Iterable<T> | 위젯 트리에서 일치하는 상태 리스트 |
tap(Finder finder, { int pointer int buttons: kPrimaryButton }) → Future<void> | 주어진 위젯의 중심에서 포인터가 아래로 향하고 포인터를 향한 순서를 전달하십시오 |
tapAt(Offset location, { int pointer int buttons: kPrimaryButton }) → Future<void> | 지정된 위치에서 포인터 아래로 / 포인터 위로 순서를 전달합니다. |
widget<T extends Widget>(Finder finder) → T | 위젯 트리에서 일치하는 위젯. |
widgetList<T extends Widget>(Finder finder) → Iterable<T> | 위젯 트리에서 일치하는 위젯 리스트. |
https://api.f lutter.dev/flutter/flutter_test/WidgetTester-class.html
CommonFinder Class 알아보기
자주 사용되는 위젯 찾기를 위한 간단한 구문 제공합니다.
이 클래스는 find로 한 번 인스턴스화 됩니다.
CommonFinder클래스의 메서드들은 대부분 Finder 타입으로 값을 리턴합니다.
주요 메서드
- byKey(..) : 특정 Key 가있는 위젯을 검색하여 위젯을 찾습니다
expect(find.byKey(ProfileScreenWidgetKeys.arrowImage), findsOneWidget);
- byType(..) : 특정 유형의 위젯을 검색하여 위젯을 찾습니다
expect(find.byType(Scaffold), findsOneWidget);
- text(..) :인수와 동일한 문자열을 포함하는 Text 및 EditableText 위젯을 찾습니다
expect(find.text("hello"), findsOneWidget);
전체 메서드
Commonfinder class 전체 메서드
method | description |
ancestor({Finder of, Finder matching, bool matchRoot: false }) → Finder | of매개 변수의 조상이며 매개 변수와 일치하는 위젯을 찾습니다 matching |
byElementPredicate(ElementPredicate predicate, { String description, bool skipOffstage: true }) → Finder | element를 사용하여 위젯을 찾습니다 predicate |
byElementType(Type type, { bool skipOffstage: true }) → Finder | 특정 유형의 요소를 검색하여 위젯을 찾습니다 |
byIcon(IconData icon, { bool skipOffstage: true }) → Finder | 인수와 동일한 아이콘 데이터가 포함 된 아이콘 위젯을 찾습니다 |
byKey(Key key, { bool skipOffstage: true }) → Finder | 특정 Key 가있는 위젯을 검색하여 위젯을 찾습니다 |
bySemanticsLabel(Pattern label, { bool skipOffstage: true }) → Finder | RegExp.hasMatch 또는 문자열 동등에 의해 주어진 과 일치하는 시맨틱 위젯을 찾습니다 |
byTooltip(String message, { bool skipOffstage: true }) → Finder | 주어진 메시지와 함께 툴팁 위젯을 찾습니다 |
byType(Type type, { bool skipOffstage: true }) → Finder | 특정 유형의 위젯을 검색하여 위젯을 찾습니다 |
byWidget(Widget widget, { bool skipOffstage: true }) → Finder | 현재 위젯이 인수로 지정된 인스턴스 인 위젯을 찾습니다 |
byWidgetPredicate(WidgetPredicate predicate, { String description, bool skipOffstage: true }) → Finder | widget predicate 을 사용하여 위젯을 찾습니다 |
descendant({Finder of, Finder matching, bool matchRoot: false bool skipOffstage: true }) → Finder | of매개 변수의 자손이며 매개 변수와 일치하는 위젯을 찾습니다 |
text(String text, { bool skipOffstage: true }) → Finder | 인수와 동일한 문자열을 포함하는 Text 및 EditableText 위젯을 찾습니다 |
widgetWithIcon(Type widgetType, IconData icon, { bool skipOffstage: true }) → Finder | IconData 를 표시 하는 Icon 자손 이 포함 된 위젯을 찾습니다 |
widgetWithText(Type widgetType, String text, { bool skipOffstage: true }) → Finder | Text 하위 항목 이 포함 된 위젯을 찾습니다 |
https://api.f lutter.dev/flutter/flutter_test/CommonFinders-class.html
Finder Class 알아보기
주로 CommonFinder의 결과로 리턴되는 클래스입니다.
Property
property | description |
allCandidates → Iterable<Element> | 이 파인더가 고려할 모든 Element를 돌려 줍니다 |
description → String | 파인더가 찾고있는 것을 설명합니다. |
first → Finder | 이 파인더와 일치하는 첫 번째 요소를 리턴합니다. |
last → Finder | 이 파인더와 일치하는 마지막 요소를 리턴합 |
skipOffstage → bool | 이 파인더가 offStage 노드를 건너 뛰는 지 여부입니다 |
Method
property | description |
apply(Iterable<Element> candidates) → Iterable<Element> | 주어진리스트에서이 파인더의 패턴과 일치하는 모든 요소를 반환합니다 |
at(int index) → Finder | 이 파인더와 일치하는 지정된 index 요소를 리턴합니다 |
evaluate() → Iterable<Element> | 현재 결과(finder로 얻은 위젯트리내 요소들)를 반환합니다. precache가 true를 리턴하는 경우 , 계산하여 얻는 것 보다 값싼비용으로 요소를 얻을 수 있습니다. |
hitTestable({Alignment at: Alignment.center }) → Finder | 적중 테스트로 도달 할 수있는 요소를 반환합니다. |
precache() → bool | 파인더를 evaluate하려고 시도합니다. 트리의 요소가 파인더와 일치하는지 여부를 리턴합니다. 그 중 하나라도 있으면 결과가 캐시되고 evaluate 에서 얻을 수 있습니다 |
ex
expect((numActiveFinder.evaluate().first.widget as Text).data, '2');
https://api.f lutter.dev/flutter/flutter_test/Finder-class.html
Flutter Test Matcher
주요 Matcher
const
- findsNothing : 위젯 트리에 일치하는 위젯이 없음
expect(find.text('wash car'), findNothing);
- findsWidgets : 위젯 트리에 일치하는 위젯 있음(하나 이상의 위젯을 찾을 때)
expect(find.text('wash car'), findWidgets);
- findsOneWidget : 위젯 트리에 일치하는 하나의 위젯을 찾음
expect(find.text('wash car'), findsOneWidget);
- findsNWidgets(int n) : 위젯트리에 특정 수의 위젯을 찾음
expect(find.text('wash car'), findNWidgets(3));
Method
- expect ( actual , matcher) : actual과 matcher가 일치하는지 비교
- expectLater (..) : expect와 마찬가지로 matcher가 일치를 하는지 기다렸다가 비교합니다 , 완료되는 Future를 반환합니다
- startsWith(..) , isNot(..), constains(..), endWith(..)
expectLater(
memberProfileBloc,
emitsInOrder([
MemberProfileEmpty(),
MemberProfileLoading(),
MemberProfileLoaded(memberProfile),
]),
);
test(".split() splits the string on the delimiter", () {
expect("foo,bar,baz", allOf([
contains("foo"),
isNot(startsWith("bar")),
endsWith("baz")
]));
});
steam matcher method
- emits() : 단일 데이터 이벤트와 일치합니다.
- emitsError() : 단일 오류 이벤트와 일치합니다.
- emitsDone : 단일 완료 이벤트와 일치합니다.
- mayEmit() : 일치하지 않아도 내부 매처와 일치하는 경우 이벤트를 사용합니다.
- mayEmitMultiple() : mayEmit() 처럼 작동하지만 가능한 한여러 번 일치하는 이벤트와 일치합니다.
- emitsAnyOf() : 여러 가능한 일치 중 하나 이상과 일치하는 이벤트를 사용합니다.
- emitsInOrder() : 여러 개의 매처와 일치하는 이벤트를 연속으로 사용합니다.
- emitsInAnyOrder() :처럼 작동 emitsInOrder()하지만 매처를 임의의 순서로 일치시킬 수 있습니다.
- neverEmits() : 내부 매처와 일치하지 않고 완료되는 스트림과 일치합니다.-
test("process emits status messages", () {
// Dummy data to mimic something that might be emitted by a process.
var stdoutLines = new Stream.fromIterable([
"Ready.",
"Loading took 150ms.",
"Succeeded!"
]);
expect(stdoutLines, emitsInOrder([
"Ready.",
startsWith("Loading took"),
emitsAnyOf(["Succeeded!", "Failed!"]),
emitsDone
]));
});
전체 Matcher
전체 Matcher
const
const | description |
findsNothing | 위젯 트리에 일치하는 위젯이 없음 |
findsWidgets | 위젯 트리에 일치하는 위젯 있음(하나 이상의 위젯을 찾을 떄) |
findsOneWidget | 위젯트리에 일치하는 하나의 위젯을 찾음 |
findsNWidgets(int n) | 위젯트리에 특정 수의 위젯을 찾음 |
isOffstage | offstage에 있는 위젯일때 |
isOnstage | onstage에 있는 위젯일때 |
isInCard | Finder 가 하나 이상의 카드 위젯 조상 이있는 단일 위젯을 찾도록 지정합니다 |
isNotInCard | 하나 이상의 카드 위젯 조상이 없습니다. |
hasOneLineDescription | 객체의 toString ()이 그럴듯한 한 줄 설명이라고 가정합니다 |
hasAGoodToStringDeep | 객체의 toStringDeep ()이 그럴듯한 여러 줄 설명이라고 가정합니다. |
throwsFlutterError | FlutterError를 발생시키는 함수에 대한 매처 |
throwsAssertionError | AssertionError를 발생시키는 함수에 대한 매처 |
throwsException | Exception을 발생시키는 매처 |
throwFormatException | FormatException을 발생시키는 함수에 대한 매처 |
throwsNoSuchMethodError | NoSuchMethodError을 발생시키는 함수에 대한 매처 |
throwsNullThrownError | NullThrownError를 발생시키는 함수에 대한 매처 |
throwUnsupportedError | UnsupportedError를 발생시키는 함수에 대한 매처 |
throwUnimplementedError | UnimplementedError를 발생시키는 함수에 대한 매처 |
throwStateError | StateError를 발생시키는 함수에 대한 매처 |
isFlutterError | Error Type 이 Flutter Error |
isAssertionError | Error Type 이 AssertionError |
anything | 모든 값과 일치하는 매처 |
isEmpty | isEmpty 특성과 일치하는 매처를 리턴합니다. |
isException | 예외입니다. |
isFalse | false와 일치 |
isTrue | true와 일치 |
isPositive | match 인수가 양수이면 일치하는 매처 |
isZero | matche 인수가 0 이면 일치하는 매처 |
Method
method | description |
isSameColorAs(Color color)→Matcher | 인자의 컬러와 같은 컬러인지 비교하는 매처 |
isInstanceOf<T>()→Matcher | 실제 값의 유형을 유형 인수 T와 비교하는 매처. |
allOf(dynamic arg0, [ dynamic arg1 dynamic arg2 dynamic arg3 dynamic arg4 dynamic arg5 dynamic arg6 ]) → Matcher | 모든 인수가 인수 (최대 7 개)로 전달 된 경우 일치하는 일치자를 리턴하는 매처 |
anyOf(dynamic arg0, [ dynamic arg1 dynamic arg2 dynamic arg3 dynamic arg4 dynamic arg5 dynamic arg6 ]) → Matcher | 주어진 매처 중 하나라도 true로 평가되면 일치합니다. |
anyElement(dynamic matcher) → Matcher | 주어진 요소와 적어도 하나의 요소가 일치하는 Iterable 과 일치하는 matcher를 리턴합니다 |
contains(dynamic expected) → Matcher | 일치 인수에 예상 값이 포함되어 있으면 일치하는 지를 반환 하는 매처 |
containsAll(Iterable expected) → Matcher | 모든 값 과 임의의 순서로 일치하는 요소를 포함하는지를 반환하는 매처 |
containsAllInOrder(Iterable expected) → Matcher | 모든 값 과 동일한순서로 순서로 일치하는 요소를 포함하는지를 반환하는 매처 |
containsPair(dynamic key dynamic value) → Matcher | 키-값 쌍이 포함 된 맵이 key=> 과 일치하는지 반환하는 매처 |
containsValue(dynamic value) → Matcher | 주어진 값을 포함하고 일치하는지 반환하는 매처 |
emits(dynamic matcher) → StreamMatcher | matcher에 대한 StreamMatcher를 반환 |
emitsAnyOf(Iterable matchers) → StreamMatcher | 하나 이상이 일치하면 스트림과 일치 하는 StreamMatcher 를 반환합니다 |
emitsError(dynamic matcher) → StreamMatcher | 일치하는 단일 오류 이벤트와 일치 하는 StreamMatcher 를 반환합니다 |
emitsInAnyOrder(Iterable matchers) → StreamMatcher | 각 매 처가 일치하는 순서대로 스트림과 일치 하는 StreamMatcher 를 리턴합니다 |
emitsInOrder(Iterable matchers) → StreamMatcher | 각 matcher가 일치하는 경우 스트림과 일치 하는 StreamMatcher 를 차례로 반환합니다 |
emitsThrough(dynamic matcher) → StreamMatcher | 여러 이벤트와 일치하는 다음에 일치하는 이벤트가 있는 StreamMatcher 를 반환합니다 |
mayEmit(dynamic matcher) → StreamMatcher | 스트림과 일치 시킬 수 있지만 필요하지는 않은 StreamMatcher 를 반환 matcher합니다 |
mayEmitMultiple(dynamic matcher) → StreamMatcher | 일치하는 여러 이벤트와 일치 하는 StreamMatcher 를 반환합니다 |
neverEmits(dynamic matcher) → StreamMatcher | 절대로 일치하지 않는 스트림과 일치 하는 StreamMatcher 를 반환합니다 |
equals(dynamic expected, [ int limit = 100 ]) → Matcher | 값이 구조적으로 동일한 경우 일치하는 매처를 반환합니다 |
equalsIgnoringCase(String value) → Matcher | match 인수가 문자열이고 value대소 문자를 구분하지 않는 경우 와 일치하는 matcher를 반환합니다 . |
equalsIgnoringWhitespace ( String value ) → Matcher | 일치 인수가 문자열이고 value공백을 무시하고 일치하는 경우 일치하는 일치자를 반환합니다 . |
everyElement(dynamic matcher) → Matcher | 주어진 모든 요소가 일치하는 Iterable 과 일치하는 matcher를 리턴합니다 |
startsWith(String prefixString) → Matcher | 일치 인수가 문자열이고로 시작하는 경우 일치하는 일치자를 반환합니다 |
endsWith(String suffixString) → Matcher | match 인수가 문자열이고로 끝나는 경우 일치하는 matcher를 반환합니다 |
same(dynamic expected) → Matcher | same을 expected사용하여 값이와 동일한 인스턴스 인 경우 일치하는 일치 항목을 반환 합니다 . |
isA<T>() → TypeMatcher<T> | 유형이있는 객체와 일치하는 매처를 반환합니다 T |
isIn(dynamic expected) → Matcher | 일치 인수가 예상 값에 있으면 일치하는 일치자를 반환합니다. 이것은 contains 의 반대입니다 . |
isNot(dynamic matcher) → Matcher | matcher논리적 부정으로 반전되는 매처를 반환합니다 . |
predicate<T>(bool f(T value), [ String description = 'satisfies function' ]) → Matcher | |
expect(dynamic actual, { dynamic matcher, { String reason, dynamic skip }) → void | actual과 매처가 일치하는지 비교 |
expectLater(dynamic actual, { dynamic matcher, { String reason, dynamic skip }) → Future<void> | expect 와 마찬가지로 matcher가 일치를 완료하면 완료 되는 Future 를 반환합니다 |
expectSync(dynamic actual, { dynamic matcher, { String reason }) → void | 일반적으로 expect 를 사용하는 것이 좋습니다 . 여기에는 비동기 API가 호출되지 않는지 확인하는 검사가 포함됩니다. |
expectAsync0<T>(T callback(), { int count: 1, int max: 0, String id String reason }) → Func0<T> | 어진 callbackarity 0이 count여러 번 (기본적으로 1) 호출 될 것으로 프레임 워크에 알립니다 . |
https://api.f lutter.dev/flutter/package-matcher_matcher/package-matcher_matcher-library.html
참조
https://flutter.dev/docs/cookbook/testing/widget/introduction
https://api.f lutter.dev/flutter/flutter_test/WidgetTester-class.html
https://api.f lutter.dev/flutter/flutter_test/CommonFinders-class.html
https://api.f lutter.dev/flutter/flutter_test/Finder-class.html
'Flutter' 카테고리의 다른 글
Flutter Animation(플러터 애니메이션) - 1 (암시적 애니메이션) (14) | 2020.03.31 |
---|---|
Flutter(플러터)가 Dart(다트)언어를 사용하는 이유 (11) | 2020.02.02 |
Dart - Test 작성하기(test package) (154) | 2019.12.13 |
Flutter - BLoC 패턴 알아보기 (264) | 2019.12.13 |
Flutter - Row,Column정렬하기 (MainAxisAlignment, CrossAxisAlignment) (287) | 2019.12.02 |
댓글