flutter - 如何在 Flutter 中对连接包进行单元测试
问题描述
我正在使用连接包,假设我有以下代码:
_connectionSubscription = Connectivity().onConnectivityChanged.listen((
ConnectivityResult result) {
if (result == ConnectivityResult.mobile ||
result == ConnectivityResult.wifi && !isDataLoading) {
_loadData();
}
});
我想模拟不同的状态,看看我的代码在不同情况下是如何工作的。
那么我们如何在 Flutter 中使用 package:flutter_test 环境对其进行测试呢?
解决方案
您可以通过实现它来创建 Connectivity 类的模拟。然后在模拟类中,根据需要实现方法。
例子:
enum ConnectivityCase { CASE_ERROR, CASE_SUCCESS }
class MockConnectivity implements Connectivity {
var connectivityCase = ConnectivityCase.CASE_SUCCESS;
Stream<ConnectivityResult> _onConnectivityChanged;
@override
Future<ConnectivityResult> checkConnectivity() {
if (connectivityCase == ConnectivityCase.CASE_SUCCESS) {
return Future.value(ConnectivityResult.wifi);
} else {
throw Error();
}
}
@override
Stream<ConnectivityResult> get onConnectivityChanged {
if (_onConnectivityChanged == null) {
_onConnectivityChanged = Stream<ConnectivityResult>.fromFutures([
Future.value(ConnectivityResult.wifi),
Future.value(ConnectivityResult.none),
Future.value(ConnectivityResult.mobile)
]).asyncMap((data) async {
await Future.delayed(const Duration(seconds: 1));
return data;
});
}
return _onConnectivityChanged;
}
@override
Future<String> getWifiBSSID() {
return Future.value("");
}
@override
Future<String> getWifiIP() {
return Future.value("");
}
@override
Future<String> getWifiName() {
return Future.value("");
}
}
推荐阅读
- android - 按一次返回按钮停留在同一个片段上,如果按两次,它将返回到上一个片段
- amazon-web-services - 没有 ECS 任务的 CloudWatch 日志,原因是“任务中的基本容器已退出”
- java - 在 Android Java 的硬件键盘上设置 CAPS_LOCK 和 NUM_LOCK
- javascript - 从 Javascript 生成的 HTML 的 Ajax
- excel-formula - 将文本字符串插入 Excel 中另一个文本字符串的特定位置
- html - 想要获得 2D , 3D 效果
- android - 在 Android 中的 Exoplayer/Mediaplayer 视频上绘制覆盖文本和动画
- python-3.x - 如何减少 xgboost 中的误报?
- java - 使用 RetryListenerSupport 时无法从 @Retryable 获取可抛出的集合
- gtk - 将光标设置在 Gtk.Entry 的末尾