我有一个Flutter 翼插件,它使用平台通道来做一些本地工作.

如何正确地为需要此插件的应用程序编写测试?

单元测试只适用于纯DART函数.我不相信Widget测试能够测试使用平台通道到本机的东西.所以剩下的就是集成测试了.

据我所知,集成测试将启动您的主应用程序,您可以围绕应用程序控制它并进行测试.

在我的例子中,我只想测试使用插件的代码(该插件使用平台通道来处理本机内容).

同样重要的是从平台通道返回的值,因此使用真实的平台通道而不是模拟通道调用本机端非常重要.

可能吗?我能告诉集成测试人员打开我的应用程序的一个虚拟版本吗,有点像集成小部件测试人员?

推荐答案

你的问题的简短答案似乎是否定的.Flutter 驱动程序(集成测试)只能与用户界面AFAIK交互.它无法拦截对插件的调用.它用于从UI测试整个应用程序.

然而,在单元和小部件测试中,可以拦截对插件的调用.这允许监视对插件的调用并模拟响应.这样你就可以测试插件的dart代码和/或使用插件的小部件.测试本机代码需要编写本机测试.

以下是截取对插件的调用进行测试的示例:

MethodChannel('audio_recorder')
    .setMockMethodCallHandler((MethodCall methodCall) async {
  log.add(methodCall);
  switch (methodCall.method) {
    case 'start':
      isRecording = true;
      return null;
    case 'stop':
      isRecording = false;
      return {
        'duration': duration,
        'path': path,
        'audioOutputFormat': extension,
      };
    case 'isRecording':
      return isRecording;
    case 'hasPermissions':
      return true;
    default:
      return null;
  }
});

有关完整示例,请参见here

Flutter相关问答推荐

如何更新文本字段的基础上的选定下拉菜单?

Flutter Go路由深度链接不按预期工作

在Riverpod ConsumerWidget中使用文本编辑控制器

Build.gradle专线:2个Flutter Flutter

无法让Riverpod Stream发出新值

Flutter 蜂窝-检索非基元数据类型列表

在Fighter中,我如何在窗口的顶部和底部排列Widget?

设置Flutter 中的ListView.Builder()的最小高度

'Flutter的无效常数值错误

如何在Flutter 中使用滚动展开窗口小部件

Riverpod Provider.family 和 HookConsumerWidget 不刷新 UI

如何使用providerContainer监听/写入FutureProvider?

无法在 Flutter 项目中安装最新版本的 image_picker

无状态和有状态小部件,我可以同时使用吗?

Riverpod 注册多少个 providers

Flutter 自定义对齐

Flutter - 我需要显示文本,但应用程序不需要

graphql_flutter 错误:非抽象类GraphQLWebSocketChannel缺少实现

在 FAB 上添加表格小部件单击 FLUTTER

使用 Firebase/Flutter 进行应用判断 - 100% 无效请求