Unit testing 如何在Dart中测试异步流

Unit testing 如何在Dart中测试异步流,unit-testing,dart,dart-async,Unit Testing,Dart,Dart Async,我有这样简单的课 抽象类服务器连接{ 信息流; 未来发送(消息m); ... } 您使用message调用send,异步响应将流式传输到onMessage。现在我需要通过这个连接发送各种消息和测试响应。我做了这个测试,但它不起作用(我对这些ExpectAsync感到迷茫),而且_waitForNextEvent不是很好(但至少起作用!) 测试('连接',(){ getCon()。然后((服务器连接c){ Future\u waitForNextEvent(流s){ streamss; 完成符c

我有这样简单的课

抽象类服务器连接{
信息流;
未来发送(消息m);
...
}
您使用message调用send,异步响应将流式传输到onMessage。现在我需要通过这个连接发送各种消息和测试响应。我做了这个测试,但它不起作用(我对这些ExpectAsync感到迷茫),而且_waitForNextEvent不是很好(但至少起作用!)

测试('连接',(){
getCon()。然后((服务器连接c){
Future\u waitForNextEvent(流s){
streamss;
完成符c=新的完成符();
ss=s.listen((消息m){
ss.cancel();
c、 完成(m);
});
返回c.未来;
}
_waitForNextEvent(c.onMessage)。然后(expectAsync1(
(m) =>expect(m,新的isInstanceOf('OkMessage'))
));
c、 发送(新状态消息());
_waitForNextEvent(c.onMessage)。然后(expectAsync1(
(m) =>expect(m,新的isInstanceOf('PongMessage'))
));
c、 发送(新PingMessage());
});
});

那么,测试Dart流的正确而优雅的方法是什么呢?

谢谢你,甘特,异步测试必须在异步测试本身之前定义。不过,测试更长的异步通信并不容易。

可能重复的问题请查看参考问题。如果它没有帮助添加评论。在开始任何异步操作之前,您需要注册一个方法,该方法将使用
expectAsyncX()
调用。在最新的unittest包(0.10.0)中,expectAsync0/1/2已被弃用。似乎0.10.0有一个bug(只是为了让你知道你可能会遇到它)。我猜这个测试总是会失败,因为两条消息都会触发两个回调,例如,发送
PingMessage
,测试将中断,因为第一次回调需要
OkMessage
假设
PingMessage
不是子类化
OkMessage
。我想安全的方法是为每一条不同的消息创建一个新的流,但我可能错了。很高兴你找到了答案。异步在开始时有点困难,但您已经习惯了。