如何在 Flutter 单元测试上模拟 Platform

E. *_*sen 5 unit-testing flutter

我正在努力在单元测试中测试“platform.isAndroid”。我知道 dart.io 的平台不能被嘲笑,因为它是一个抽象的实例。然而,谷歌团队本身有一个平台包,但不幸的是没有任何文档或简单的使用示例。

任何人都可以帮助测试示例来检查if (platform.isAndroid)或 iOS 吗?

我尝试用 Mockito 来模拟它,但没有成功。

import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:platform/platform.dart';

class MyPlatform extends Mock implements LocalPlatform {};

void main() {
    var _platform = MyPlatform();
    when(_platform.isAndroid).thenReturn(true);

    ...

}
Run Code Online (Sandbox Code Playgroud)

我的控制器如下所示。由于版权原因,我没有放置完整的代码,但如果您需要更多详细信息,请告诉我。

import 'package:device_info/device_info.dart';
import 'package:flutter/material.dart';
import 'package:mobx/mobx.dart';
import 'package:platform/platform.dart';
import 'package:share_extend/share_extend.dart';

part 'pdf_view_controller.g.dart';

class PdfViewController = _PdfViewControllerBase with _$PdfViewController;

abstract class _PdfViewControllerBase with Store {
  final _platform = LocalPlatform();

  @observable
  Widget actionButton = SizedBox();

  @action
  getActionButton() async {
    if (_platform.isAndroid) {
      var info = await DeviceInfoPlugin().androidInfo;
      if (info.version.sdkInt < 23) {
        actionButton = SizedBox();
      } else {
        actionButton = IconButton(
          icon: Icon(Icons.share),
          onPressed: () {
            ShareExtend.share(path, "file");
          },
        );
      }
    } else {
      actionButton = IconButton(
        icon: Icon(Icons.share),
        onPressed: () {
          ShareExtend.share(path, "file");
        },
      );
    }
  }
}
Run Code Online (Sandbox Code Playgroud)