1

私はこのような単純なクラスを持っています

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 をテストするための適切で洗練された方法は何でしょうか?

4

1 に答える 1

0

ありがとうギュンター、非同期テストは非同期テスト自体の前に定義する必要があります。ただし、より長い非同期通信をテストするのは簡単ではありません。

于 2014-02-27T08:26:28.413 に答える