Flutter Dio接口测试:如何验证getPoints方法调用时请求正确的端点路径
验证Dio请求端点路径的测试方案
嘿,我来帮你搞定这个测试断言的问题!要验证getPoints(id:12)是否正确调用了points/12/端点,你需要借助Mockito的参数捕获功能,检查传入fetch方法的RequestOptions对象里的路径属性。
具体实现步骤
- 捕获请求参数:使用
captureAny捕获mockDioAdapter.fetch的第一个参数(也就是RequestOptions实例)。 - 断言路径正确性:从捕获到的参数中提取
path属性,和你期望的端点路径做对比。
修改后的完整测试代码
test( "should return Points for a valid id and hit the correct endpoint", () async { // 准备模拟响应 when(mockDioAdapter.fetch(any, any, any)).thenAnswer( (_) async => successfulRequestResponseJson, ); // 调用待测试方法 Points points = await pointsRemoteDataSource.getPoints(id: 12); // 捕获并验证请求路径 final capturedRequest = verify(mockDioAdapter.fetch(captureAny, any, any)).captured.first as RequestOptions; expect(capturedRequest.path, equals("points/12/")); // 可选:额外验证请求方法是GET expect(capturedRequest.method, equals("GET")); }, );
代码说明
captureAny是Mockito提供的参数捕获器,用来获取传入方法的特定参数;captured.first会拿到我们捕获到的第一个参数(也就是请求的配置对象)。- 如果你的Dio实例配置了
baseUrl,不用担心,RequestOptions.path存储的是你在dio.get()中传入的相对路径,和你代码里写的"points/$id/"完全匹配,所以这个断言是准确的。
内容的提问来源于stack exchange,提问作者Rohan Taneja
相关产品推荐
相关产品推荐

