unit-testing - 如何在Dart中对大量异步流程进行单元测试?

标签 unit-testing asynchronous dart dart-async dart-unittest

我有一个包含许多异步部分的库,测试其中的特定部分有时可能意味着等待n个异步过程完成,然后才能实际运行测试。我一直在使用这种方法来实现我的目的:

void expectAsyncWithReadyCheckAndTimeout(bool readyCheck(), int timeout, void expect()){
  DateTime start = new DateTime.now();
  Duration limit = new Duration(seconds: timeout);
  var inner;
  inner = (){
    if(readyCheck()){
      expect();
    }else if(new DateTime.now().subtract(limit).isAfter(start)){
      throw 'async test timed out';
    }else{
      Timer.run(expectAsync(inner));
    }
  };
  inner();
}

它基本上一直运行,直到可以运行测试或指定的超时时间结束为止,是否可以通过dart unittest库直接实现此目的或类似的方式?

最佳答案

我通常要做的是使用expectAsync制作一个“完成”功能,然后在完成复杂测试后再调用该功能。

testFoo() { 
  var done = expectAsync((){});
  someComplexTest(....
     ...
     if (eveerythingOk) done();
     ..
  )
}

也就是说:预先创建expectAsync包装的函数,并在您认为测试成功完成时调用它-手动处理其他所有操作。

关于unit-testing - 如何在Dart中对大量异步流程进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316170/

相关文章:

unit-testing - 如何编写在Vue组件中模拟$ route对象的测试

objective-c - 当我将头文件导入我的单元测试类时,为什么 Xcode 返回错误 "file not found"?

unit-testing - "Self-mocking"使用 Rhino Mocks

c++ - 如何在 Qt 中设计异步包装器返回值?

c# - 使用await时读取文本文件和代码跳转

Flutter:如何从货币代码中获取货币符号

python - 一个包是否只需要用于测试,而不用于安装?

c# - C#中异步调用方法

android - Flutter 返回空字符串 - HTTP(S) GET 请求

android - 如何在 TextFormField 中显示/隐藏密码?