flutter 如何在Dart中测试void函数?

flmtquvp  于 2023-02-09  发布在  Flutter
关注(0)|答案(3)|浏览(220)

我是Dart/Flutter单元测试的新手,我想为一个void函数写一个测试,当函数返回一些东西时,我会写一个如下的测试:

test('Gets user save', () async {
      final userSave = await mockSource!.getUserSave();
      expect(userSave!.age, equals(20));
});

在类似上面的场景中,可以使用expect,因为getUserSave函数返回用户模型。
检查一下void/Future函数的测试通过还是失败怎么样?我不能使用expect,因为它不返回值。

Future<void> clearUserSave() async {
    DatabaseClient mockDBClient = MockDatabaseClientImpl();
    mockDBClient.clear();
}

我使用flutter_testmockito进行测试。

a11xaf1n

a11xaf1n1#

通常void函数会产生某种副作用,在编写void函数的测试时,我会在调用函数之前和之后检查void函数所影响的状态,以确保所需的副作用已经发生。
在这个特定的例子中,你在DatabaseClient上调用clear,我不知道DatabaseClient api的细节,但是我会在调用clear之前构造一个测试,其中客户端包含一些数据,然后在调用clear之后检查数据是否不再存在。
大致是这样的:

Future<void> clearUserSave() async {
    DatabaseClient mockDBClient = MockDatabaseClientImpl();
    mockDBClient.add(SOMEDATA);
    expect(mockDBClient.hasData, true);
    mockDBClient.clear();
    expect(mockDBClient.hasData, false);
}
tjjdgumg

tjjdgumg2#

你可以在方法中添加一个可以为空的变量并赋值,调用方法后检查这个变量是否为NotNull,如下所示:

test('Gets user save', () async {
  await mockSource?.getUserSave();
  final userSave=mockSource.user;
  expect(userSave,isNotNull );

});
zwghvu4y

zwghvu4y3#

测试返回void的函数:

expect(
      () async => await functionThatReturnsVoid(),
      isA<void>(),
    );

相关问题