// This is a basic Flutter widget test. // // To perform an interaction with a widget in your test, use the WidgetTester // utility in the flutter_test package. For example, you can send tap and scroll // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. import 'package:yx_app_upgrade_flutter/app_upgrade_plugin.dart'; import 'package:yx_app_upgrade_flutter/app_upgrade_plugin_enhanced.dart'; import 'package:app_upgrade_plugin_example/main.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; class MockAppUpgradePluginEnhanced implements AppUpgradePluginEnhanced { // 在这里 mock AppUpgradePluginEnhanced 的所有方法和属性 // ... // 你可以根据测试需要返回特定的值 @override void addDownloadCallback(DownloadCallback callback) {} @override void addErrorCallback(ErrorCallback callback) {} @override void addUpgradeCallback(UpgradeCallback callback) {} @override Future checkApkExists(String version, String? md5) async => false; @override Future checkUpdateSmart(String url, {Map? params, bool forceRefresh = false, Duration? cacheDuration}) async => null; @override Future clearCache() async {} @override UpgradeConfig get config => UpgradeConfig.instance; @override void configure( {bool? debugMode, int? checkIntervalHours, bool? autoCheck, bool? wifiOnly, int? downloadTimeout, int? connectTimeout, int? maxRetryCount, bool? supportBreakpoint, bool? verifyIntegrity, VersionCompareStrategy? versionStrategy, Map? customHeaders}) {} @override void dispose() {} @override Future downloadApkSmart(String url, {String? versionName, Function(DownloadProgress p1)? onProgress, String? savePath, String? md5, String? sha256, bool resumeIfExists = true}) async => null; @override Future> getAppInfo() async => {}; @override Future> getCacheStats() async => {}; @override DownloadTask? getCurrentDownloadTask() => null; @override Future getPlatformVersion() async => 'mock'; @override Future goToAppStore(String url) async => false; @override Future installApkSmart(String filePath) async => false; @override NetworkStatus? get networkStatus => NetworkStatus( type: NetworkType.wifi, quality: NetworkQuality.good, isConnected: true, isMetered: false, ); @override void pauseDownload() {} @override void removeDownloadCallback(DownloadCallback callback) {} @override void removeErrorCallback(ErrorCallback callback) {} @override void removeUpgradeCallback(UpgradeCallback callback) {} @override Future resumeDownload() async => false; @override Future retryDownload() async => false; @override Future refreshNetworkStatus() async {} @override VersionComparator get versionComparator => VersionComparator(); @override void cancelDownload() {} } void main() { // 关键修复:确保测试绑定已初始化 TestWidgetsFlutterBinding.ensureInitialized(); setUp(() { // 为所有方法通道设置一个默认的 mock 处理器,防止未 mock 的调用抛出异常 TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( const MethodChannel('plugins.flutter.io/package_info'), (MethodCall methodCall) async { if (methodCall.method == 'getAll') { return { 'appName': 'app_upgrade_plugin_example', 'packageName': 'com.example.app_upgrade_plugin_example', 'version': '1.0.0', 'buildNumber': '1', }; } return null; }, ); TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( const MethodChannel('dexterous.com/flutter/local_notifications'), (MethodCall methodCall) async => null, // 对通知插件的所有调用都返回 null ); TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( const MethodChannel('dev.flutter.plugins/connectivity'), (MethodCall methodCall) async { if (methodCall.method == 'check') { return 'wifi'; // 模拟网络状态为 WiFi } return null; }, ); }); testWidgets('Verify Platform version', (WidgetTester tester) async { // 使用 Mock enhanced plugin AppUpgradeSimple.instance = AppUpgradeSimple.private(plugin: MockAppUpgradePluginEnhanced()); await tester.pumpWidget(const MyApp()); // 只验证应用能正常启动,不验证具体的UI内容 expect(find.byType(MyApp), findsOneWidget); }); testWidgets('Verify Network Status Detection', (WidgetTester tester) async { // 使用 Mock enhanced plugin final mockPlugin = MockAppUpgradePluginEnhanced(); AppUpgradeSimple.instance = AppUpgradeSimple.private(plugin: mockPlugin); await tester.pumpWidget(const MyApp()); // 验证网络状态检测功能 final networkStatus = mockPlugin.networkStatus; expect(networkStatus, isNotNull); expect(networkStatus!.isConnected, isTrue); expect(networkStatus.type, equals(NetworkType.wifi)); expect(networkStatus.isMetered, isFalse); }); }