这是我对单元流进行单元测试时遇到的问题的非常简化的版本。

该测试检查是否已将正确的事件添加到流中-看来工作正常-例如,将add( 'test')值更改为add( 'test2')将使测试失败。

但是,当您注释掉fireKeepAliveMessage(message);行以使事件不会引发时,单元测试将永远运行。

如何为测试添加某种超时?还是有解决此问题的更好方法?

library stream_test;

import "package:unittest/unittest.dart";
import "dart:async";

void main() {
   test("aa", () {
   StreamController streamController = new StreamController();

   streamController.add( "test");
   Stream underTest = streamController.stream;

   underTest.first.then(expectAsync((e){
        expect( e, equals( "test"));
   }));
 });
}

最佳答案

我会这样做:

library stream_test;

import "package:unittest/unittest.dart";
import "dart:async";

void main() {
  test("aa", () {
    StreamController streamController = new StreamController();

    Timer t;

    Stream underTest = streamController.stream;
    underTest.first.then(expectAsync((e) {
      expect(e, equals("test"));
      if (t != null) {
        t.cancel();
      }
    }));

    t = new Timer(new Duration(seconds: 3), () {
      fail('event not fired in time');
    });

    streamController.add("test");
  });
}

07-26 04:41