如何等待流事件在单元测试中得到处理?

时间:2019-05-23 08:21:05

标签: unit-testing dart stream

单元测试意味着通过Sink方法将某些项目传递给add对象之后,将对此做出响应。

class Subject {
  final StreamController<Item> _itemStreamController = StreamController();
  Sink<Item> get itemsSink => _itemStreamController.sink;
  Stream<Item> get _itemsStream => _itemStreamController.sink;
  final SomeService _service;

  Subject(this._service) {
    _itemsStream.listen((item) => _service.processItem(item));
  }
}

单元测试本身:

test('description', () async {
  final Item givenItem = Item("givenValue");
  final SomeService givenService = MockSomeService();
  final Subject subject = Subject(givenService);
  subject.itemsSink.add(givenItem);
  verify(givenService.add(givenItem));
});

正如您所了解的那样,事件循环线程首先处理verify指令,然后才将事件分派给侦听器。

如果我仅在接收器交互和方法调用验证之间插入await Future.value(null);,那么所有功能都像一个超级按钮。尽管如此,这种解决方案还是很难看的。

单元测试框架本身是否可以提供一些东西来安排在事件循环结束时进行验证?还是采取任何措施通过此单元测试,而无需借助await Future.value(null);之类的东西?

0 个答案:

没有答案