为何Flutter测试中expect(Future.value(true), Future.value(true))会失败?
问题原因分析
- 你当前写法失败的核心原因是:
expect默认直接比对传入的两个入参本身,而你两次调用Future.value(true)会生成两个完全独立的Future实例,Dart中普通对象的==判断默认校验的是内存地址是否相同,两个独立创建的Future显然不属于同一个对象,因此匹配失败。 - 你预期的「比对Future最终返回值」的逻辑,不会在直接比对Future对象时触发,需要明确使用异步匹配规则才能实现。
正确写法示例
有两种常用的实现方案可以达到你要的匹配效果:
- 先等待两个Future执行完成,拿到返回值后再做比对
final f1 = Future.value(true); final f2 = Future.value(true); expect(await f1, await f2); // 此时比对的是两个bool值,匹配通过
- 使用测试库提供的
completion异步匹配器,直接匹配Future的返回结果
// 匹配单个Future的返回值 expect(Future.value(true), completion(true)); // 如需比对两个Future的返回值是否一致,可以结合Future.wait实现 expect( Future.wait([Future.value(true), Future.value(true)]), completion([true, true]), );
内容的提问来源于stack exchange,提问作者Afandi Yusuf
相关产品推荐
相关产品推荐

