You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Flutter测试中expect(Future.value(true), Future.value(true))会失败?

问题原因分析
  • 你当前写法失败的核心原因是:expect默认直接比对传入的两个入参本身,而你两次调用Future.value(true)会生成两个完全独立的Future实例,Dart中普通对象的==判断默认校验的是内存地址是否相同,两个独立创建的Future显然不属于同一个对象,因此匹配失败。
  • 你预期的「比对Future最终返回值」的逻辑,不会在直接比对Future对象时触发,需要明确使用异步匹配规则才能实现。
正确写法示例

有两种常用的实现方案可以达到你要的匹配效果:

  1. 先等待两个Future执行完成,拿到返回值后再做比对
final f1 = Future.value(true);
final f2 = Future.value(true);
expect(await f1, await f2); // 此时比对的是两个bool值,匹配通过
  1. 使用测试库提供的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:24:03