Как проверить метод, который использует package_info во 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 Пакет предоставляет способ отловить ошибки? Есть ли способ узнать, выполняется ли метод тестом?

3 ответа

Как сказал Гюнтер, вы можете издеваться над 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 к объекту репозитория. Тогда это репо легко издеваться. Это также работает для package_info_plus.

Другие вопросы по тегам