创建商店时测试加载失败
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\(需要管理员权限)。
我尝试进行单元测试,但无法加载:
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\(需要管理员权限)。