1

我有一个库,其中包含许多异步部分,测试它的特定部分有时可能意味着在测试可以实际运行之前等待 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 库来实现这一点或类似的东西?

4

2 回答 2

1

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

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

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

于 2014-04-27T09:40:56.347 回答
0

您可以添加一个可选参数expectAsync,说明需要调用该方法的频率。

于 2014-04-26T20:36:54.190 回答