私はこのような単純なクラスを持っています
abstract class ServerConnection {
Stream onMessage;
Future send(Message m);
...
}
send をメッセージで呼び出すと、非同期応答が onMessage にストリーミングされます。ここで、この接続を介してさまざまなメッセージとテスト応答を送信する必要があります。私はこのテストを作成しましたが、機能していません (私はこれらの expectAsynces で迷っています)、_waitForNextEvent はあまり良くありません (しかし、少なくとも機能しています!)
test('connection', () {
getCon().then((ServerConnection c) {
Future<Message> _waitForNextEvent(Stream s) {
StreamSubscription ss;
Completer c = new Completer();
ss = s.listen((Message m) {
ss.cancel();
c.complete(m);
});
return c.future;
}
_waitForNextEvent(c.onMessage).then(expectAsync1(
(m) => expect(m, new isInstanceOf<OkMessage>('OkMessage'))
));
c.send(new StatusMessage());
_waitForNextEvent(c.onMessage).then(expectAsync1(
(m) => expect(m, new isInstanceOf<PongMessage>('PongMessage'))
));
c.send(new PingMessage());
});
});
では、Dart Streams をテストするための適切で洗練された方法は何でしょうか?