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

Flutter测试中Mockito的when API为isLoggedIn存根失效求助

问题分析与解决

你遇到的问题根源很明确:你给一个MockAuthProvider实例打了桩,但调用方法时传入了另一个全新的未配置实例。

看你的代码:

MockAuthProvider mock = MockAuthProvider();
when(mock.isLoggedIn).thenReturn(false);

await provider.update(MockAuthProvider()); // 这里传了新实例,不是上面的mock!

你给mock对象的isLoggedIn getter设置了返回值,但调用update时,传入的是MockAuthProvider()创建的新对象——这个新对象完全没有被打桩,所以当update方法访问它的isLoggedIn时,就会抛出MissingStubError。

修正后的测试代码

把传入update的参数改成你已经配置好的mock对象即可:

@GenerateMocks([AuthProvider])
void main() {
  test('If there is not a valid session, the data are clean', () async {
    UserDataProvider provider = UserDataProvider();
    MockAuthProvider mock = MockAuthProvider();

    when(mock.isLoggedIn).thenReturn(false);

    await provider.update(mock); // 这里用已打桩的mock实例
    expect((await provider.joinedCommunities).isEmpty, true);
  });
}

额外提示

如果不想为每个方法都手动打桩,可以改用@GenerateNiceMocks注解生成"友好mock",它会为未打桩的方法返回默认值(比如bool类型返回false,数值返回0等),避免这类错误:

@GenerateNiceMocks([MockSpec<AuthProvider>()])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:19:56