[Fluter/Dart] 테스트 정보

26784 단어 FlutterDartstudytech

개요


최근 품질 보증과 향상이 주목받는 가운데 시스템 각 분야의 테스트 자동화도 주목받고 있다.
지금까지도 테스트 스타일의 샘플을 만들어 목시로 테스트한 경우도 있는데, 횟수를 반복하면 같은 테스트를 해도 정밀도가 떨어지는 경우가 있겠죠.
그래서 요즘 시험의 주류는 인코딩이다.

test

  • 애니메이션
  • https://youtu.be/bj-oMYyLZEY
  • 방법
    주로 다음과 같은 3가지가 있다.
  • Integration
  • Unit
  • Widget
  • https://docs.flutter.dev/cookbook/testing

    한번 해 보았다.


    공통부분

  • test용 라이브러리 가져오기
    대략, 쓰여 있지만, 기술 이하flutter pub get두드리기
  • pubspec.yaml
    dev_dependencies:
      integration_test:
        sdk: flutter
      flutter_test:
        sdk: flutter
    
  • test용 폴더와 데이터 파일을 준비합니다.
  • your_app/
      lib/
        main.dart
      integration_test/
        app_test.dart
      test/
        unit/
          unit_test.dart
        widget/
          widget_test.dart
    
    !
    포인트 테스트는integration-테스트 산하에서 다른 것은 모두 테스트 산하에서 제작된다.
    !
    테스트 파일의 파일 이름은'00'입니다.test.딸이라는 이름 아니면 안 될 것 같은데.

    Integration 테스트의 경우


    integration_test.dart
    import 'package:flutter_test/flutter_test.dart'; //testコードはこれをimport
    import 'package:integration_test/integration_test.dart'; //インテグレーションtestコードはこれをimport
    
    import 'package:introduction/main.dart' as app; // as appでrunAppを記述したdartファイルを呼び出す。
    
    void main() {
      // インテグレーションテストの場合はこれを1行目に書く
      IntegrationTestWidgetsFlutterBinding.ensureInitialized();
    
        // テストをグループ化するコード
      group('end-to-end test', () {
      // Widgetテストのコード
        testWidgets('tap on the floating action button, verify counter',
            (WidgetTester tester) async {
          // ここでrunAppを起動
          app.main();
          // pumpAndSettleで画面を起動を待つ
          await tester.pumpAndSettle();
    
          // 初期値を確認
          expect(find.text('0'), findsOneWidget);
    
          // Widgetをtooltipをキーに見つける。…①
          final Finder fab = find.byTooltip('Increment');
    
          // ①で見つけたWidgetをタップするコード…②
          await tester.tap(fab);
    
          // ②でタップした結果を待つ、ロジック
          await tester.pumpAndSettle();
    
          // ボタン押下で内容が変化したかを確認するロジック
          expect(find.text('1'), findsOneWidget);
        });
        
      });
    }
    
    [해설]

  • Finder
    Widget을 찾아서 그 Widget에 동작을 시작하고 Widget에 저장된 정보를 꺼냅니다.

  • expectexpect(A, B)A:Finderで指定した情報をとりだす。,B:取り出した情報にマッチするじょうけんがいくつ存在しているかを指定する。
    findsOneWidget // Finderで指定した条件のWidgetが一つだけ存在している場合。
    findsNothing // Finderで指定した条件のWidgetが存在していない。
    findsWidgets // Finderで指定した条件のWidgetが複数存在している場合。
    findsNWidgets(n) // Finderで指定した条件のWidgetがn個存在している場合。
    
  • 테스트 시


    unit_test.dart
    import 'package:flutter_test/flutter_test.dart';
    
    void main() {
      test('unit Test', () {
        var test = 5;
        expect(test, 5);
      });
    }
    
    글쎄, integration 시험에서 거의 다 봤기 때문에 특별히 할 말은 없어요.
    controller, 서비스,provider 등의 테스트에서 사용할 수 있습니다.

    widget 테스트 시


    widget_test.dart
    import 'package:flutter_test/flutter_test.dart';
    
    testWidgets('NoteTest', (WidgetTester tester) async {
        await tester.pumpWidget(
          MaterialApp(
            onGenerateRoute: (settings) {
              if (settings.name == '/') {
                return MaterialPageRoute(builder: (_) => const NoteListPage());
              } else if (settings.name == '/edit') {
                final arguments = settings.arguments as String?;
                return MaterialPageRoute(
                  builder: (_) => NoteEditPage(note: arguments ?? ""),
                );
              }
    
              throw Exception('Route not found');
            },
          ),
        );
    
        expect(find.text('There\'s nothing to show'), findsOneWidget);
    
        await tester.tap(find.byKey(const Key('add_note')));
        await tester.pumpAndSettle();
    
        expect(find.byKey(const Key('edit_text')), findsOneWidget);
    
        await tester.enterText(find.byKey(const Key('edit_text')), 'ゴゴゴゴゴ・・・。');
    
        await tester.tap(find.byKey(const Key('commit_button')));
        await tester.pumpAndSettle();
    
        expect(find.text('ゴゴゴゴゴ・・・。'), findsOneWidget);
        
        ・・・
      });
    
    트위스트 단일 테스트로 위젯을 만들려면tester.pumpWidget 가방MaterialApp으로 안에 넣고 싶은 위젯을 넣는다.그리고 포인트 시험과 같은 방법.

    비동기 테스트 정보


    라이브러리 추가


    pubspec.yaml
    dev_dependencies:
      flutter_test:
        sdk: flutter
      flutter_lints: ^1.0.0
      mockito: #これと
      build_runner:  #これを追加する。
    
    프로그램 라이브러리
    컨텐트
    mockito
    mockito에서 자동으로 비동기 실행 클래스를 생성합니다.
    build_runner
    mockito를 만들 때 필요합니다.

    샘플 코드

  • 우선 이 상태에서 구축
  • async_test.dart
    ([テストしたいClass])
    void main() {
    }
    
  • 상기 코드를 제작하여 작업 디렉터리에서 아래 명령을 두드린다.
  • $ flutter pub pub run build_runner build
    
    MockテストしたいClass류로 나눌 수 있다.
  • 이것을 사용하여 테스트 코드를 씁니다.
  • async_test.dart
    import 'package:flutter_test/flutter_test.dart';
    import 'package:mockito/annotations.dart';
    import 'package:mockito/mockito.dart';
    import 'package:sample/apis/MockビルドしたいClass.dart';
    import 'package:sample/models/return_mock.dart';
    import 'api_test.mocks.dart';
    
    ([テストしたいClass])
    void main() {
      var repository = MockテストしたいClass();
    
      test('Testing cat sound method.', () async {
        final returnMock = ReturnMock(
          description: '',
        );
        
        when(repository.search('****')).thenAnswer((_) async => returnMock);
        expect(await repository.search('****'), returnMock);
        verify(repository.search('****'));
      });
    }
    
    이렇게 Mockito를 사용해도 비동기적으로 처리된 테스트 코드를 기술할 수 있다.

    Finder 정보


    이것은 Widget을 발견하는 데 사용되는 기능이지만, 발견된 수단이 산더미처럼 쌓여 있으니, 아래의 내용을 참고하십시오.주로 사용byKey(const Key('キーの名前'))https://github.com/flutter/flutter/blob/master/packages/flutter_test/lib/src/finders.dart

    키 정보


    Key는 Key 값입니다. 테스트에서 Key 값은 Widget을 찾기 위해 Widget으로 설정할 수 있습니다.
    대체로 어느 위젯이든 설정할 수 있다.
    Text(
      'Test',
      key: const ValueKey('sample_key'),
    ),
    

    키의 종류.

  • GlobalKey
  • GlobalKey
  • LocalKey
  • UniqueKey
  • ValueKey
  • ObjectKey
  • PageStorageKey
  • 자세한 내용은 애니메이션 검사를 보십시오
    https://youtu.be/kn0EOS-ZiIc
    최후
    이번엔 길어졌으니까 여기다 놔둬.

    좋은 웹페이지 즐겨찾기