如何在Dart中测试异步Stream

时间:2014-02-11 10:20:17

标签: unit-testing dart dart-async

我有像这样的简单课程

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的正确和优雅的方法是什么?

1 个答案:

答案 0 :(得分:0)

谢谢Günter,异步测试必须在之前定义异步测试本身。但是,测试更长的异步通信并不容易。