unit-testing - 如何在 Flutter 中测试使用 package_info 的方法?
问题描述
我正在编写一个 Flutter 插件,用于检查 Play Store 或 App Store 以查看应用程序是否需要更新。我正在使用package_info
包来确定用户拥有的应用程序的版本。我的代码如下所示:
getVersionStatus() {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
localVersion = packageInfo.version;
...
}
我想测试这个方法,但如果它作为单元测试运行,fromPlatform
调用就会挂起并超时测试。有没有比传testing
入布尔值更优雅的方法来解决这个问题?IE:
if (testing) {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
localVersion = packageInfo.version;
} else {
localVersion = '0.0.0'
}
包是否应该package_info
提供一种捕获错误的方法?有没有办法判断该方法是否正在通过测试运行?
解决方案
正如 Günter 所说,您可以通过在插件的 MethodChannel 中安装模拟方法处理程序来模拟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;
});
}
推荐阅读
- java - Java 中 URL 路径中的 java.lang.IllegalArgumentException
- php - 即使不使用 PHP 8 也会出现 PHP 8 错误
- flutter - 设备键盘在颤动中与我的底页重叠
- javascript - 如何检查函数是否在js中正确插入了innerHTML?
- c# - While 循环计时器带有一个不起作用 Unity 3D 的布尔值
- python - `clean()` 不能与 foriegnkey 一起正常工作
- lxd - LXD 容器:apparmor mount error -13 是什么意思?
- typescript - 为什么 tap() 运算符 Rxjs 中的返回类型发生变化?
- c# - 如何转换 IList