flutter test의 shareplus 방법이 호출되었는지 확인하기
개시하다
flutter test의 share이것은 플러스를 확인하는 방법이 호출되는 방법입니다.
flutter 테스트에서 urllauncher 방법이 호출되었는지 확인내용과 대체로 동일하지만 추가적으로 설정해야 할 부분이 있어 기재합니다.
컨디션
코드
// 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에 관해서는 여기를 참조하세요.
SharePlatform.instance
Share.Share 방법은 SharePlaatform입니다.instance에서 얻은 실례를 실행하는 방법입니다.
따라서 모크로 바꾸면 방법이 호출되었는지 확인할 수 있다.
FakeMethodChannelShare
SharePlatform.이것은 instance에 설정된 인스턴스이지만 Url Launcher Plaatform 상태에서 Plaatform Interface입니다.verifyToken에서 오류가 발생하여 사용할 수 없습니다.
따라서 M ock Plateform Interface Mixin을 사용하여 페이크 클래스를 만들고 그 mock을 만듭니다.
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!;
}
(코드 참조)총결산
share_플러스를 확인할 수 있는 방법이 호출되었습니다.
더 쉬운 방법이 있다면 알려주세요.
Reference
이 문제에 관하여(flutter test의 shareplus 방법이 호출되었는지 확인하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/greendrop/articles/6041b69ca30f49텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)