【问题标题】:How to test a void function in Dart?如何在 Dart 中测试 void 函数?
【发布时间】:2022-02-03 21:59:06
【问题描述】:

我是 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 进行测试。

【问题讨论】:

  • 期望void 函数中观察到什么行为?如果是副作用,请进行测试。如果是函数没有抛出异常,你也可以测试一下。

标签: flutter unit-testing dart testing flutter-test


【解决方案1】:

通常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);
}

【讨论】:

    【解决方案2】:

    您可以在方法中添加可为空的变量并分配变量值,在调用方法后检查此变量是否为 isNotNull 像这样:

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

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 2022-12-10
      • 2020-06-22
      • 2020-09-11
      • 2020-06-04
      • 2017-09-18
      相关资源
      最近更新 更多