如何在 Flutter 中测试使用 package_info 的方法?
How to test a method that uses package_info in Flutter?
我正在编写一个 Flutter 插件来检查 Play Store 或 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
包是否应该提供一种捕获错误的方法?有没有办法通过测试判断该方法是否 运行 ?
正如 Günter 所说,您可以通过在插件的 MethodChannel 中安装 mock method handler 来模拟 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;
});
}
我将 PackageInfo 访问权限委托给了存储库对象。然后这个 repo 很容易模拟。这也适用于 package_info_plus.
PackageInfo.setMockInitialValues(appName: "abc", packageName: "com.example.example", version: "1.0", buildNumber: "2", buildSignature: "buildSignature");
我正在编写一个 Flutter 插件来检查 Play Store 或 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
包是否应该提供一种捕获错误的方法?有没有办法通过测试判断该方法是否 运行 ?
正如 Günter 所说,您可以通过在插件的 MethodChannel 中安装 mock method handler 来模拟 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;
});
}
我将 PackageInfo 访问权限委托给了存储库对象。然后这个 repo 很容易模拟。这也适用于 package_info_plus.
PackageInfo.setMockInitialValues(appName: "abc", packageName: "com.example.example", version: "1.0", buildNumber: "2", buildSignature: "buildSignature");