测试使用插件和平台通道的 Flutter 代码

Posted

技术标签:

【中文标题】测试使用插件和平台通道的 Flutter 代码【英文标题】:Testing Flutter code that uses a plugin and platform channel 【发布时间】:2019-02-01 09:09:10 【问题描述】:

我有一个颤振插件,它使用平台通道做一些原生工作。

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

单元测试仅适用于纯 dart 函数。我不相信 Widget 测试将能够测试使用平台通道到原生的东西。这样就剩下集成测试了。

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

就我而言,我只想测试使用插件的代码(将平台通道用于原生内容)。

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

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

【问题讨论】:

【参考方案1】:

您的问题的简短回答似乎是否定的。 Flutter 驱动程序(集成测试)只能与 UI、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 代码的主要内容,如果未能解决你的问题,请参考以下文章

使用平台通道编写平台特定的代码

如何通过 FlutterView 或 Flutter.createFragment 使用平台通道

如何使用FlutterView或Flutter.createFragment的平台通道

修改Flutter app图标

Flutter学习之混合开发

Flutter学习之混合开发