创建商店时测试加载失败

Test failed to load while creating a Store

我尝试进行单元测试,但无法加载:

dart:ffi                                                                                                         new DynamicLibrary.open
package:objectbox/src/native/bindings/bindings.dart 21:28                                                        loadObjectBoxLib
package:objectbox/src/native/bindings/bindings.dart 50:41                                                        C
package:objectbox/src/native/model.dart 18:31                                                                    new Model
package:objectbox/src/native/store.dart 63:17                                                                    new Store
package:productivitie/features/to_do_listing/data/datasource/project_database_data_source_object_box.dart 23:15  new ProjectDataBaseDataSourceObjectBox.<fn>
dart:async                                                                                                       _completeOnAsyncReturn
package:path_provider/path_provider.dart                                                                         getApplicationDocumentsDirectory

Failed to load "F:\Programme\gitProgramme\productivitie\test\features\to_do_listing\data\datasource\project_database_data_source_object_box_test.dart": Invalid argument(s): Failed to load dynamic library (193)

我的构造函数,问题出在哪里:

21 ProjectDataBaseDataSourceObjectBox(){
22    getApplicationDocumentsDirectory().then((Directory dir){
23      store = Store(getObjectBoxModel() , directory: dir.path + '/objectbox' );
24      box = store!.box<Project>();
25    });
26
27  }

Flutter Doctor 没有发现任何问题。 我再次 build_run 我的模型(覆盖 objectbox.g.dart 文件),没有帮助。 我的版本是:

 objectbox: 0.14.0
  objectbox_flutter_libs: any
  path_provider: ^2.0.1

我首先认为这是 path_provider 的问题,如果 path_provider 尝试获取 ApplicationDocumentsDirectory,我确实将 MockMethodCallHandler 设置为 return 模拟目录路径。

final directory = await Directory.systemTemp.createTemp();

      const MethodChannel('plugins.flutter.io/path_provider').setMockMethodCallHandler((MethodCall call) async {
        if(call.method == 'getApplicationDocumentsDirectory'){
          return directory.path;
        }
        return null;
      });

但这也无济于事。

错误的重要部分是:

Failed to load dynamic library (193)

根据您问题中的路径,我假设您在 Windows 上 运行。在那种情况下,您需要安装动态库,以便编译后的测试可执行文件可以找到它。尊重 how Windows loads DLLs this can be either the same directory as where the .exe is, or a system directory. Following Dart CLI apps or Flutter desktop apps installation instructions 应该有所帮助:

  • 在系统范围内安装 objectbox-c(在 Windows 上使用“Git bash”):
    bash <(curl -s https://raw.githubusercontent.com/objectbox/objectbox-dart/main/install.sh)
  • 将下载的lib/objectbox.dll复制到C:\Windows\System32\(需要管理员权限)。