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

ktca8awb  于 2022-12-14  发布在  Flutter
关注(0)|答案(2)|浏览(111)

我想围绕一个抽象的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);
  }
}

问题是,我不知道如何在我的UploaderMock中创建我自己的Event,所以我可以调用onEvent。如果我试图创建一个new Event(),我会得到下面的错误:

  • 类别'Event'没有预设建构函式。*

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

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

这对于生产是有意义的,但对于测试却不起作用。
有什么想法吗?我如何测试使用StreamSubscription的代码?

mzillmmw

mzillmmw1#

您可以在自定义类上 implementsEvent

class Bar {
  Bar._() {}
}

class Foo implements Bar {
  Foo();
}
mepcadol

mepcadol2#

您不能这样做,但是您可以将它们设置为公共的,并使用@visibleForTesting对其进行注解,以便在从不在同一个库或测试中的代码访问它们时获得DartAnalyzer警告。
如何在Flutter中测试私有函数/方法?

相关问题