Flutter Dart:如何模拟和存根Sqflite事务(内部回调)?

Flutter Dart:如何模拟和存根Sqflite事务(内部回调)?,flutter,unit-testing,dart,testing,mocking,Flutter,Unit Testing,Dart,Testing,Mocking,我试图通过()模拟sqlite_api.dart的以下方法: 未来事务(未来函数(事务txn)操作,{bool?exclusive}); 我对该方法的实施/调整如下: Future\u事务(设置有效负载)异步{ 等待此消息。_api.transaction((txn)async=>{ for(有效负载中的最终请求){ 等待txn.rawisert(req.query.sql、req.query.arguments) } }); } 我的db_test.dart使用Mocktail(): te

我试图通过()模拟sqlite_api.dart的以下方法:

未来事务(未来函数(事务txn)操作,{bool?exclusive});
我对该方法的实施/调整如下:

Future\u事务(设置有效负载)异步{
等待此消息。_api.transaction((txn)async=>{
for(有效负载中的最终请求){
等待txn.rawisert(req.query.sql、req.query.arguments)
}
});
}
我的db_test.dart使用Mocktail():

test('if[single]put成功,()异步{
//设置
sut=数据库本地提供程序(db:mockDb);
最终查询=语句(sql:'插入测试(名称、值、num)值(“一些名称”,1234456.789)';
最终请求=数据库本地请求(查询:查询);
//嘲弄
当(()=>mockDb.transaction((txn)=>txn.rawsert(req.query.sql,req.query.arguments)))
.thenAnswer(()async=>1);
//行动,断言
等待sut.put(req:req,bulkReq:null)。然后((响应)=>{
期望(回应。。。
});
});//测试结束
我从控制台得到以下响应错误
我可能没有准确回答您的问题,但您可以通过使用
sqflite\u common\u ffi
的实际实现来模拟sqflite,因为它可以在dart VM上的所有桌面(MacOS、Linux、Windows)上工作,所以在FLART和dart单元测试中也可以:

更多信息请点击此处:

一种解决方案是为每个测试在内存中打开一个数据库,以便从一个空数据库开始

导入“包:test/test.dart”;
导入“包:sqflite_common/sqlite_api.dart”;
进口“包装:sqflite_common_ffi/sqflite_ffi.dart”;
void main(){
//如果需要,初始化ffi加载程序。
sqfliteffinit();
test('simple sqflite example',()异步{
var db=await databaseFactoryFfi.openDatabase(inMemoryDatabasePath);
expect(wait db.getVersion(),0);
等待db.close();
});
}
当(()=>mockDb.transaction(any()).thenAnswer(())async=>{{1}});
当(()=>mockDb.rawsert(any()).thenAnswer(())async=>1);

这就成功了!但这不是100解决方案,因为闭包不是存根而是绕过的。

非常感谢!这些都是非常好的考虑因素,我将使用它们作为替代用途!特别是我不知道的“sqflite_common_ffi”,看起来不错。