这是我对单元流进行单元测试时遇到的问题的非常简化的版本。
该测试检查是否已将正确的事件添加到流中-看来工作正常-例如,将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");
});
}