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

Flutter使用Mockito模拟http post请求始终返回null问题求助

问题修复方案

1. 修复业务代码属性调用错误

Flutter官方http库的Response对象使用body属性获取响应内容,而非data(data是Dio库的响应属性),你的代码此处调用了不存在的属性会直接触发异常,进入catch分支抛出ServerException。
修改代码:

// 原代码
var parsedJson = json.decode(response.data);
// 修改后
var parsedJson = json.decode(response.body);

2. 修复Mock参数匹配规则

你调用client.post时传入了3个参数:Uri对象、body、headers,但when语句仅匹配了第一个位置参数,剩余命名参数没有匹配规则,导致Mock未命中返回默认null。
修改测试用例的when逻辑:

when(clientMock.post(
  any,
  body: anyNamed('body'),
  headers: anyNamed('headers')
)).thenAnswer((_) async => http.Response(jsonMockResponse, 400));

3. 修复Mock响应的JSON格式错误

标准JSON要求所有字符串键、字符串值必须用双引号包裹,你当前写的Mock响应不符合JSON规范,json.decode解析时会直接抛出异常。
修改Mock响应内容:

String jsonMockResponse =
    '{"non_field_errors": ["Unable to log in with provided credentials."]}';

4. 修复异常断言写法

如果提前await异步函数,异常会在await阶段直接抛出,无法进入expect逻辑。需要直接把异步函数调用传入expect,由框架内部处理执行和异常捕获。
修改断言代码:

expect(
  remoteData.signIn('test@email.com', 'password123'),
  throwsA(const TypeMatcher<ServerException>())
);

完成以上修改后即可正常完成测试逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 13:36:02