我有一个库,它有许多异步部分,测试它的特定部分有时可能意味着在测试可用于实际运行之前等待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库实现这个或类似的东西?
答案 0 :(得分:1)
我通常做的是用expectAsync
创建一个“完成”函数,然后在复杂测试完成时调用该函数。
testFoo() {
var done = expectAsync((){});
someComplexTest(....
...
if (eveerythingOk) done();
..
)
}
即:预先创建expectAsync
包装的功能,并在您认为测试成功完成时调用它 - 手动处理其他所有内容。
答案 1 :(得分:0)
您可以向expectAsync
添加一个可选参数,说明需要多长时间调用该方法。