簡體   English   中英

如何在 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布爾值更優雅的方法來解決這個問題? 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;
  });
}
PackageInfo.setMockInitialValues(appName: "abc", packageName: "com.example.example", version: "1.0", buildNumber: "2", buildSignature: "buildSignature");

我委托 PackageInfo 訪問存儲庫對象。 這個 repo 很容易模擬。 這也適用於 package_info_plus。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM