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

Jam*_*mes 11 dart flutter flutter-test

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

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

单位测试仅适用于纯飞镖功能.我不相信Widget测试能够测试使用平台通道到本机的东西.因此,离开集成测试.

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

对于我的情况,我想测试使用插件的代码(使用平台通道进行原生内容).

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

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

mmc*_*abe 8

您问题的简短答案似乎是“否”。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;
  }
});
Run Code Online (Sandbox Code Playgroud)

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