Flutter测试报错“No method stub was called”问题求助
排查Flutter测试中Mockito的"No method stub was called"错误
错误原因
- 你手写的
MockApiService是普通的接口实现类,调用它的fetchData()方法时会直接执行你写的真实逻辑,Mockito没法拦截这个调用,所以when()方法里识别不到需要打桩的mock方法,直接抛出错误。 - 测试逻辑存在漏洞:你在还没调用
fetchData()的情况下就执行verify验证,这本身也会导致验证失败,因为目标方法根本没被触发过。
解决步骤
改用Mockito自动生成的Mock类
不要自己手写Mock实现,而是用Mockito的代码生成功能创建符合要求的Mock类。首先确保你的pubspec.yaml里添加了必要的开发依赖:dev_dependencies: flutter_test: sdk: flutter mockito: ^5.4.0 build_runner: ^2.4.4生成Mock类并调整测试代码
用Mock类继承+implements目标接口的方式定义Mock类,然后用Mockito的API打桩和验证:import 'package:http/http.dart' as http; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; // 基于HttpService生成Mockito兼容的Mock类 class MockHttpService extends Mock implements HttpService {} abstract class HttpService { Future<http.Response> fetchData(); } Future<http.Response> helperFunc() async { return http.Response('Mocked Response', 200); } void main() { group('API Tests', () { test('Mock API Request', () async { // 初始化Mockito生成的Mock对象 final mockApiService = MockHttpService(); // 为Mock方法配置返回逻辑(打桩) when(mockApiService.fetchData()) .thenAnswer((_) async => helperFunc()); // 必须先调用目标方法,才能验证调用行为 await mockApiService.fetchData(); // 验证fetchData方法是否被调用了1次 verify(mockApiService.fetchData()).called(1); }); }); }生成Mock类文件
在终端执行以下命令,让build_runner生成对应的Mock类代码:flutter pub run build_runner build
内容的提问来源于stack exchange,提问作者dit0m
相关产品推荐
相关产品推荐

