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

Flutter单元测试:异常场景下Mock方法调用的验证问题

问题解决:Flutter异步异常场景下的Mock调用验证

你的测试失败核心原因是异步断言未等待完成就执行了verify:expect处理异步抛出异常的断言时,不会等待异步函数执行完毕就继续走后续代码,导致verify运行时,service.get(request)的异步流程还没走到调用getAccessToken()的步骤,此时Mock方法的调用次数为0,验证自然失败。

修复方案

使用expectLater并await它,确保异常断言完成后再执行Mock调用验证:

test(
  'when an invalid access token is used the api service should throw an exception',
  () async {
    final authService = getAndRegisterAuthService(invalidToken: true);
    final service = APIServiceNetworkImpl();

    const request = APIRequest("/test");
    // 等待异步异常断言流程全部完成
    await expectLater(
      () async => await service.get(request),
      throwsA(isA<DioException>()),
    );
    // 此时异步逻辑已执行完毕,可正确验证Mock调用次数
    verify(authService.getAccessToken()).called(1);
  },
);

原理说明

  • expectLater会返回一个Future,await它会等待整个异步断言的流程完成,包括service.get(request)的执行(以及其中对getAccessToken()的调用)。
  • 这样就能保证verify在Mock方法被调用后才执行,验证结果符合预期。

内容的提问来源于stack exchange,提问作者Heikkisorsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:55:05