0

我正在编写一个验证注销按钮的小部件测试。当通过用户按钮点击触发注销功能时,FlutterSecureStorage 中的某些项目会被清除。我想验证在我们的 Preferences 类中调用了一个方法,该类是 FlutterSecureStorage 的包装器。我们在应用程序和测试中使用 GetIt 作为依赖注入器。

在我的小部件测试中,我为 Preferences 类声明了一个 Mock,如下所示:

class MockPreferences extends Mock implements IPreferences {
  @override
  Future<void> clearPreferences() async {
    // clear some values
  }
}

在我的小部件测试设置中,我有以下内容:

GetIt.instance.registerSingleton<IPreferences>(MockPreferences());

在我的 testWidgets 中,我获得了对模拟的引用,如下所示:

var prefs = GetIt.instance<IPreferences>();

当我的小部件测试运行时,当我在上面的行之后放置一个断点时,我可以验证该prefs对象肯定是类型MockPreferences,并且与小部件测试的其他交互证明正在对模拟对象而不是真实对象调用方法。

当我尝试验证clearPreferences()使用 Mockito 的verify函数调用该方法时,如下所示:

  var prefs = GetIt.instance<IPreferences>();
  verify(prefs.clearPreferences()).called(greaterThan(0));

The following TestFailure object was thrown running a test: Used a non-mockito object. 

在我可以看到 prefs 对象是一个 mockito 对象的行之后放置一个断点var prefs,但是测试不会将它识别为一个 mockito 对象并且测试失败。

任何人都可以提供任何建议吗?谢谢!

4

0 回答 0