创建商店时测试加载失败

问题描述

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

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 的问题,我确实设置了一个 MockMethodCallHandler 以在 path_provider 尝试 getApplicationDocumentsDirectory 时返回一个模拟的目录路径

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;
      });

但这也无济于事。

解决方法

错误的重要部分是:

无法加载动态库 (193)

从您问题中的路径来看,我假设您在 Windows 上运行。在这种情况下,您需要安装动态库,以便编译后的测试可执行文件可以找到它。考虑到 how Windows loads DLLs,这可以是与 .exe 所在的目录相同的目录,也可以是系统目录。关注 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\(需要管理员权限)。