15

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

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

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

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

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

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

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

4

1 回答 1

14

看来您的问题的简短答案是否定的。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;
  }
});

有关完整示例,请参见此处

于 2018-10-01T01:48:38.510 回答