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

