我有一个包含许多异步部分的库,测试其中的特定部分有时可能意味着等待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/