如何测试StreamSubscription并在Dart中创建事件?

时间:2018-04-16 10:23:18

标签: dart flutter

我想围绕我编写的抽象Uploader类编写一些单元测试:

abstract class Uploader {
  Future<StreamSubscription> subscribe(String filename, void onEvent(Event event));
}

class FirebaseUploader implements Uploader {
  Future<StreamSubscription> subscribe(String filename, void onEvent(Event event)) async {
    String userId = await auth.signInAnonymously();
    DatabaseReference databaseReference = _databaseReference(userId, filename);
    return databaseReference.onValue.listen(onEvent);
  }
}

class UploaderMock implements Uploader {

  Future<StreamSubscription> subscribe(String filename, void onEvent(Event event)) async {

    Event event = new Event(); // The class 'Event' doesn't have a default constructor.
    return Future.value(null);
  }
}

问题是,我无法解决如何在Event中创建自己的UploaderMock,因此我可以致电onEvent。如果我尝试创建new Event(),则会收到以下错误:

课程&#39;活动&#39;没有默认构造函数。

这是因为Event有一个私有构造函数:

Event._(this._data) : snapshot = new DataSnapshot._(_data['snapshot']);

这对生产有意义,但它并不适用于测试。

有什么想法吗?如何测试使用StreamSubscription的代码?

1 个答案:

答案 0 :(得分:1)

您可以在自定义类上实现 Event

class Bar {
  Bar._() {}
}

class Foo implements Bar {
  Foo();
}