본문 바로가기
Flutter

Flutter - WidgetTest(위젯 테스트) 작성해보기

by 봄석 2019. 12. 17.

Flutter - WidgetTest(위젯 테스트) 작성해보기

flutter_test 패키지를 사용하여

widget을 test 하는 방법에 대하여 알아보도록 하겠습니다.

 

 

목차

Table of Contents

 

 

 

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

https://pub.dev/packages/test

-

댓글