如何从颤振单例类创建模拟对象?

时间:2021-04-30 17:42:05

标签: flutter mocking flutter-test

我正在尝试为我的 Flutter 应用程序编写单元测试。我正在使用 Mockito package。我对新的颤振版本的空安全要求有一些问题。 Mockito 需要新的 flutter 版本,但我使用的许多其他软件包都不兼容,所以我只是将 // @dart=2.9 放在所有文件的顶部。不确定这是否会导致某些问题。

所以在这里我想测试当在 SliderRatingPage 上调用 onPressedSubmit 方法时(这是用户点击某个按钮时发生的情况),应用程序将调用数据库。具体来说,它应该调用 insertRow 类中定义的 DatabaseHelper 方法。

在这里,我希望用 @GenerateMocks([DatabaseHelper]) 注释测试用例将有效地模拟对 DatabaseHelper 类的每次调用,因此我可以使用 verify 来测试 insertRow 方法是否被调用,就像下面的代码所写的那样。但是 DatabaseHelper 显然是一个非模拟对象,因为这是我在尝试运行测试时收到的错误消息。

那么编写符合我预期的测试的正确方法是什么?

// @dart=2.9
import 'package:test/test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:my_app/uidesign/page_slider_rating.dart'; //SliderRatingPage class
import 'package:my_app/database/database_helpers.dart';  //DatabaseHelper class, singleton

@GenerateMocks([DatabaseHelper])
void main() {
  test('onPressedSubmit calls database.', () async {
    SliderRatingPage page = SliderRatingPage();
    page.createState().onPressedSubmit();

    verify(DatabaseHelper.instance.insertRow(any));
  });
}

0 个答案:

没有答案