如何在dart中对大量异步进程进行单元测试?

时间:2014-04-26 20:30:02

标签: 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库实现这个或类似的东西?

2 个答案:

答案 0 :(得分:1)

我通常做的是用expectAsync创建一个“完成”函数,然后在复杂测试完成时调用该函数。

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

即:预先创建expectAsync包装的功能,并在认为测试成功完成时调用它 - 手动处理其他所有内容。

答案 1 :(得分:0)

您可以向expectAsync添加一个可选参数,说明需要多长时间调用该方法。