【问题标题】:Dart - unit test of a stream event timing outDart - 流事件超时的单元测试
【发布时间】:2014-06-04 02:39:46
【问题描述】:

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

测试检查是否已将正确的事件添加到流中 - 它似乎工作正常 - 例如,将值 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"));
   })); 
 });
}

【问题讨论】:

    标签: dart dart-async dart-unittest


    【解决方案1】:

    我会这样做:

    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");
      });
    }
    

    【讨论】:

    • 谢谢甘特。和往常一样,你来救援,帮助我完成对异步代码的单元测试:)
    【解决方案2】:

    Stream 类对此有方法。

     Stream timeout(Duration timeLimit, {Function void onTimeout(EventSinksink)})
    

    使用与此流相同的事件创建一个新流。

    每当超过 timeLimit 在两个事件之间传递时 流,onTimeout函数被调用。

    在收听返回的流之前,倒计时不会开始。 每次从这里转发事件时都会重置倒计时 流,或者当流暂停和恢复时。

    onTimeout 函数使用一个参数调用:an dart-async.EventSink 允许将事件放入返回的 溪流。此 EventSink 仅在调用 onTimeout 期间有效。

    如果省略 onTimeout,超时只会放一个 dart-async.TimeoutException 进入返回的错误通道 流。

    返回的流不是广播流,即使这个流是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      相关资源
      最近更新 更多