Flutter packages Location 테스트

개시하다


Flutter를 이용한 애플리케이션 개발이기 때문에 Google Map 설치는 UI 섹션에 대한 설치를 자주 하는데 문서를 찾을 수 있으면 되지만 테스트에 대해서는 전혀 없습니다.이번에도 Google Map을 설치하고 Location을 사용했지만, 조사를 많이 해서 드디어 테스트를 할 수 있게 돼서 정리했습니다.
젠 첫 투고!!

하고 싶은 일

  • Google Map은 google_maps_flutter에서 구현
  • 현재 위치 사용location 플러그인 획득
  • 제작 1로 제작된 화면의 테스트
  • 생성 테스트

  • 현재 위치의location 플러그인을 가져옵니다. 물론 테스트에서 작동하지 않습니다.
    그래서 위치 모형을 만든다.모듈은 플랫폼 인터페이스를 이용하여 제작한다.plugin_platform_interface
  •   final location = Location();
      final platform = MockLocationPlatform();
      LocationPlatform.instance = platform;
    
  • location 플러그인의 getLocation()을 시작하고 테스트용 LatLng을 설정하여 데이터를 만듭니다.참고로 샘플 LatLng은'오사카 시티'입니다.
  •  class MockLocationPlatform extends Mock with MockPlatformInterfaceMixin implements LocationPlatform {
      @override
      Future<LocationData> getLocation() async {
        return LocationData.fromMap(<String, double>{
          'latitude': 34.6874598748376,
          'longitude': 135.52605115003277,
        });
      }
    
  • Widget Test의 경우 테스트용 화면을 제작한다.
    (테스트용 화면을 만드는 부분을 생략할 수 있도록 허락해 주세요)
    화면을 실행하기 전에 getLocation() 을 실행하십시오.
  • testWidgets('Google Map Test', (tester) async {
          await tester.runAsync(() async {
              await location.getLocation(); // こっちが先
              await _pump(tester); // 画面があと
    
              expect(find.byType(GoogleMap), findsOneWidget);
            });
        });
    

    모든 코드


    sample.dart
    import 'package:flutter_test/flutter_test.dart';
    import 'package:google_maps_flutter/google_maps_flutter.dart';
    import 'package:location/location.dart';
    import 'package:location_platform_interface/location_platform_interface.dart';
    import 'package:mockito/mockito.dart';
    import 'package:plugin_platform_interface/plugin_platform_interface.dart';
      
    void main() {
      TestWidgetsFlutterBinding.ensureInitialized();
      
      final location = Location();
      final platform = MockLocationPlatform();
      LocationPlatform.instance = platform;
    
      tearDown(resetMockitoState);
    
      group('getLocation', () {
        test('get location', () async {
          final receivedLocation = await location.getLocation();
          expect(receivedLocation.latitude, 34.6874598748376);
          expect(receivedLocation.longitude, 135.52605115003277);
        });
      });
    
        group('Sample Screen', () {
        testWidgets('Google Map Test', (tester) async {
          await tester.runAsync(() async {
              await location.getLocation();
              await _pump(tester);
    
              expect(find.byType(GoogleMap), findsOneWidget);
            });
        });
      });
    }
    }
    
    Future<void> _pump(WidgetTester tester) async {
      // テスト用の画面を作成
    }
    
     class MockLocationPlatform extends Mock with MockPlatformInterfaceMixin implements LocationPlatform {
      
      Future<LocationData> getLocation() async {
        return LocationData.fromMap(<String, double>{
          'latitude': 34.6874598748376,
          'longitude': 135.52605115003277,
        });
      }
    }
    

    총결산


    이번에 테스트를 하면서 조사를 많이 했는데 Stack Overflow(해외판)에 location의 mock을 만들었어요!누군가 이렇게 썼기 때문에 나는 그 사람이 만든 모형을 참고해서 정리했다.미안합니다. 그 페이지를 몰라서 링크를 붙이지 못했습니다.
    매번 시험을 볼 때마다 여러 가지 좌절이 있었지만 꾸준히 조사한 후에 방법을 강구해서 썼습니다. 최근에 저는 약간 여러 가지 시험을 쓸 수 있게 되었습니다.(금방 까먹었다)
    앞으로 Fluter의 주목을 받는 것도 좋을 것 같아요. 조금만 도와주면 좋겠어요!
    하면, 만약, 만약...뭐가 있으면 알려주세요!

    좋은 웹페이지 즐겨찾기