flutter test의 shareplus 방법이 호출되었는지 확인하기

12988 단어 Fluttertech

개시하다


flutter test의 share이것은 플러스를 확인하는 방법이 호출되는 방법입니다.
flutter 테스트에서 urllauncher 방법이 호출되었는지 확인내용과 대체로 동일하지만 추가적으로 설정해야 할 부분이 있어 기재합니다.

컨디션

  • flutter: 2.5.2
  • share_plus: 3.0.2
  • mockito: 5.0.16
  • 코드


    // Package imports:
    import 'package:flutter_test/flutter_test.dart';
    import 'package:mockito/annotations.dart';
    import 'package:mockito/mockito.dart';
    import 'package:plugin_platform_interface/plugin_platform_interface.dart';
    import 'package:share_plus/share_plus.dart';
    import 'package:share_plus_platform_interface/method_channel/method_channel_share.dart';
    import 'package:share_plus_platform_interface/share_plus_platform_interface.dart';
    
    // Project imports:
    import 'sample_test.mocks.dart';
    
    class SampleViewModel {
      Future<void> share(String text, {String? subject}) async {
        await Share.share(text, subject: subject);
      }
    }
    
    class FakeMethodChannelShare extends Fake
        with MockPlatformInterfaceMixin
        implements MethodChannelShare {}
    
    @GenerateMocks([FakeMethodChannelShare])
    void main() {
      late MockFakeMethodChannelShare mockMethodChannelShare;
    
      setUp(() {
        Share.disableSharePlatformOverride = true;
        mockMethodChannelShare = MockFakeMethodChannelShare();
        SharePlatform.instance = mockMethodChannelShare;
      });
    
      test('share', () async {
        final viewModel = SampleViewModel();
    
        const text = 'Sample Text';
        const subject = 'Sample Subject';
    
        when(mockMethodChannelShare.share(text, subject: subject))
            .thenAnswer((_) async {});
    
        await viewModel.share(text, subject: subject);
    
        verify(mockMethodChannelShare.share(text, subject: subject));
      });
    }
    
    

    mockito


    mockito의 mock과 when,verify에 관해서는 여기를 참조하세요.
    https://pub.dev/packages/mockito

    SharePlatform.instance


    Share.Share 방법은 SharePlaatform입니다.instance에서 얻은 실례를 실행하는 방법입니다.
    따라서 모크로 바꾸면 방법이 호출되었는지 확인할 수 있다.
    https://github.com/fluttercommunity/plus_plugins/blob/main/packages/share_plus/share_plus/lib/share_plus.dart

    FakeMethodChannelShare


    SharePlatform.이것은 instance에 설정된 인스턴스이지만 Url Launcher Plaatform 상태에서 Plaatform Interface입니다.verifyToken에서 오류가 발생하여 사용할 수 없습니다.
    따라서 M ock Plateform Interface Mixin을 사용하여 페이크 클래스를 만들고 그 mock을 만듭니다.
    https://github.com/fluttercommunity/plus_plugins/blob/main/packages/share_plus/share_plus_platform_interface/lib/share_plus_platform_interface.dart
    https://github.com/flutter/plugins/blob/plugin_platform_interface-v2.0.2/packages/plugin_platform_interface/lib/plugin_platform_interface.dart

    Share.disableSharePlatformOverride = true;


    SharePlatform.instance의 취득은 다음과 같은 get _platform를 사용했다.
    하지만 Linux/Windows 이외의 환경에서만 SharePlaatform이 이렇게 작동할 수 있습니다.instance에서 지정한 모크가 사용할 수 없는 상태입니다.
    따라서 설정Share.disableSharePlatformOverride = true;은 Linux/Windows에서도 작동합니다.
    (나만의 경우 로컬 Mac에서는 정상적인 동작이고 CI(Linux)에서는 오류가 발생했습니다. 눈치챘습니다)
      static SharePlatform get _platform {
        if (__platform == null) {
          if (!_disablePlatformOverride && !kIsWeb) {
            if (Platform.isLinux) {
              __platform = ShareLinux();
            } else if (Platform.isWindows) {
              __platform = ShareWindows();
            }
          }
          __platform ??= SharePlatform.instance;
        }
        return __platform!;
      }
    
    (코드 참조)
    https://github.com/fluttercommunity/plus_plugins/blob/main/packages/share_plus/share_plus/lib/share_plus.dart#L30-L42

    총결산


    share_플러스를 확인할 수 있는 방법이 호출되었습니다.
    더 쉬운 방법이 있다면 알려주세요.

    좋은 웹페이지 즐겨찾기