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

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

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

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

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

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

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

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

【问题讨论】:

    标签: dart flutter flutter-test


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 2020-06-22
      • 2020-01-21
      相关资源
      最近更新 更多