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
相关产品推荐
相关产品推荐

