测试使用插件和平台通道的 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 使用平台通道