Flutter 测试 MissingPluginException

Flutter Test MissingPluginException

运行 依赖于 SharedPreferences 插件的测试总是导致

MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)

我的pubspec.yaml

dev_dependencies:
  flutter_test:
     sdk: flutter

dependencies:
  flutter:
     sdk: flutter
  shared_preferences: 0.2.3

的代码在应用程序本身中运行良好。 为了 运行 使用插件的测试,我是否遗漏了一些我需要做的事情?

如果您使用的是 shared_preferences 0.2.4 及更高版本,请使用 setMockInitialValues:

SharedPreferences.setMockInitialValues({}); // set initial values here if desired

对于早期版本,您可以手动完成:

const MethodChannel('plugins.flutter.io/shared_preferences')
  .setMockMethodCallHandler((MethodCall methodCall) async {
    if (methodCall.method == 'getAll') {
      return <String, dynamic>{}; // set initial values here if desired
    }
    return null;
  });

我在使用 flutter_secure_storage 插件时遇到了完全相同的问题。我认为问题在于,对于这两个插件,您都依赖 phone 或模拟器上的存储(而不是您的应用程序中的某些东西),因此它在您的测试环境中不可用。通过执行 flutter run your_test_file.dart 直接尝试 运行 测试。根据 https://flutter.io/testing/ 这应该执行你的测试 "in your preferred runtime environment such as a simulator or a device." 它对我来说非常有效。

@Siman 谢谢

版本shared_preferences: ^0.5.12

广告SharedPreferences.setMockInitialValues({}); 在 Flutter App

的主要功能中的 runApp() 函数之前

为我修复了这个错误