首页 > 解决方案 > 如何从颤振单例类创建模拟对象?

问题描述

我正在尝试为我的颤振应用程序编写单元测试。我正在使用Mockito 包。我对新颤振版本的空安全要求有一些问题。Mockito 需要新的颤振版本,但我使用的许多其他包不兼容,所以我只是把// @dart=2.9我所有的文件放在首位。不确定这是否可能是一些问题的根源。

所以在这里我想测试当在onPressedSubmitSliderRatingPage 上调用该方法时(这就是用户点击某个按钮时发生的情况),应用程序将调用数据库。具体来说,它应该调用类中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));
  });
}

标签: fluttermockingflutter-test

解决方案


推荐阅读