简体   繁体   English

如何在Flutter中对连接性软件包进行单元测试

[英]How to unit test connectivity package in Flutter

I'm using connectivity package and let's say I have the following code: 我正在使用连接程序包 ,假设我有以下代码:

_connectionSubscription = Connectivity().onConnectivityChanged.listen((
    ConnectivityResult result) {
  if (result == ConnectivityResult.mobile ||
      result == ConnectivityResult.wifi && !isDataLoading) {
    _loadData();
  }
});

I want to simulate different states to see how is my code working in different cases. 我想模拟不同的状态,以查看我的代码在不同情况下如何工作。

So how we can test it in Flutter using package:flutter_test environment? 那么我们如何使用package:flutter_test环境在Flutter中对其进行测试?

You can create a mock of the Connectivity class by implementing it. 您可以通过实现它来创建Connectivity类的模拟。 Then in the mock class, implement the methods as needed. 然后在模拟类中,根据需要实现方法。

example: 例:


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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM