如何测试在Flutter中使用package_info的方法?

时间:2019-01-12 18:08:26

标签: unit-testing dart flutter package-info

我正在编写一个Flutter插件,用于检查Play商店或App Store以查看是否需要更新该应用。我正在使用package_info包来确定用户拥有的应用程序的版本。我的代码如下:

getVersionStatus() {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    localVersion = packageInfo.version;
    ...
}

我想测试此方法,但是如果它作为单元测试运行,则fromPlatform调用将挂起并使测试超时。是否有比传递testing布尔值更优雅的方法来解决此问题?即:

if (testing) {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    localVersion = packageInfo.version;
} else {
    localVersion = '0.0.0'
}

package_info软件包应该提供一种捕获错误的方法吗?有没有办法判断该方法是否正在由测试运行?

1 个答案:

答案 0 :(得分:1)

就像Günter所说的,您可以模拟 PackageInfo

void packageInfoMock() {
  const MethodChannel('plugins.flutter.io/package_info').setMockMethodCallHandler((MethodCall methodCall) async {
    if (methodCall.method == 'getAll') {
      return <String, dynamic>{
        'appName': 'ABC', <--- set initial values here
        'packageName': 'A.B.C', <--- set initial values here
        'version': '1.0.0', <--- set initial values here
        'buildNumber': '' <--- set initial values here
      };
    }
    return null;
  });
}