我正在尝试为我的 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));
});
}