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

时间:2018-08-26 18:04:20

标签: dart flutter flutter-test

我有一个flutter插件,它使用平台通道来执行一些本机工作。

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

单元测试仅适用于纯飞镖功能。我不相信Widget测试将能够测试使用平台渠道原生的事物。这样就可以进行集成测试了。

据我了解,集成测试将启动您的主应用程序,您可以在应用程序中对其进行控制并进行测试。

对于我来说,我只想测试使用该插件的代码(该代码将平台通道用于本机内容)。

另外重要的是从平台渠道返回的值,因此使用真正的平台渠道而不是模拟平台渠道来调用本地端是很重要的。

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

1 个答案:

答案 0 :(得分:5)

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

但是,可以在单元测试和小部件测试中拦截对插件的调用。这样可以监视对插件的调用并模拟响应。这样,您可以测试插件的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