问题描述
我尝试进行单元测试,但无法加载:
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\(需要管理员权限)。