Unit testing 如何在dart中对高度异步的进程进行单元测试?

Unit testing 如何在dart中对高度异步的进程进行单元测试?,unit-testing,asynchronous,dart,dart-async,dart-unittest,Unit Testing,Asynchronous,Dart,Dart Async,Dart Unittest,我有一个库,其中有许多异步部分,测试其中的一个特定部分有时可能意味着在测试实际运行之前等待n个异步进程完成。我一直在使用这种方法来达到我的目的: void-expectAsynchwithReadyCheckandTimeout(bool-readyCheck(),int-timeout,void-expect()){ DateTime start=new DateTime.now(); 持续时间限制=新的持续时间(秒:超时); var内; 内部=(){ if(readyCheck()){ ex

我有一个库,其中有许多异步部分,测试其中的一个特定部分有时可能意味着在测试实际运行之前等待n个异步进程完成。我一直在使用这种方法来达到我的目的:

void-expectAsynchwithReadyCheckandTimeout(bool-readyCheck(),int-timeout,void-expect()){
DateTime start=new DateTime.now();
持续时间限制=新的持续时间(秒:超时);
var内;
内部=(){
if(readyCheck()){
expect();
}else if(new DateTime.now().subtract(limit).isAfter(start)){
抛出“异步测试超时”;
}否则{
Timer.run(expectAsync(内部));
}
};
内();
}

这基本上会一直运行,直到测试准备好运行或者某个指定的超时过期,有没有一种方法可以直接使用dart unittest库实现这一点或类似的功能?

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

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

testFoo(){
var done=expectAsync((){});
某个最复杂的(。。。。
...
如果(eveerythingOk)完成();
..
)
}

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

该参数不是告诉它需要调用N次吗?我不明白为什么会有人想这样做,我只希望我的异步测试在所有其他异步进程都完成并且测试准备就绪时运行一次,但我不知道在测试准备就绪之前要完成多少异步进程,通常可能在1到20之间。就是这样。看来我不明白你的问题。好吧,假设我调用了
expectAsync((){/*expectStuff*/},count:4)
这个
expectStuff
不是4次吗?如果我的异步进程还没有全部完成,它将失败,不是吗?或者,如果它在最后一次执行时仅
expectsStuff
,我不知道我的测试包含4个异步进程,它可能是链接在一起的任意数量的异步进程,因此,如果等待5个或更多异步链调用,测试将再次失败,不是吗?在创建异步进程时,能否为每个异步进程创建一个
expectAsync
?我基本上是为完整的web堆栈创建完整的端到端测试,测试首先在视图上调用一个方法,然后异步调用服务器,在最终返回对视图的响应并更新自身之前,它可能会对服务和数据库等执行任意数量的异步调用。
expectAsyncWithReadyCheckAndTimeout
满足了我的需求,因为它将在任意数量的异步进程完成后进行评估,前提是它在超时限制内,作为预防措施,不允许永远运行测试。我只是希望有一个内置的