当前位置: 首页 > 知识库问答 >
问题:

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

司徒寒
2023-03-14

我有一个flatter插件,它使用平台频道做一些本地工作。

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

单元测试只适用于纯省道功能。我不相信Widget测试能够测试使用平台通道到本机的东西。所以剩下的就是集成测试了。

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

在我的例子中,我只想测试使用插件的代码(该插件使用平台通道来处理本机内容)。

同样重要的是从平台渠道返回的值,因此使用真实的平台渠道而不是模拟渠道调用原生方很重要。

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

共有2个答案

陶征
2023-03-14

Flutter团队确实提到他们想在小部件测试中做更多的事情,而不是驱动程序(集成)测试。

我们不再使用颤振驱动程序,而是支持将颤振测试扩展到设备上。

从Flutter 2.8中断更改文档中,您应该在tester中使用绑定,而不是从通道中使用setMockomeodCallHandler

// old code
myMethodChannel.setMockMethodCallHandler(...);
myMethodChannel.checkMockMethodCallHandler(...);
// new code
tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(myMethodChannel, ...);
tester.binding.defaultBinaryMessenger.checkMockMessageHandler(myMethodChannel, ...);

以ImagePicker为例:

widgetTest('', (tester) async {
  const channel = MethodChannel('plugins.flutter.io/image_picker');
  tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(
    channel,
    (MethodCall methodCall) => Future.value('some-image'),
  );
});
杜彦君
2023-03-14

您的问题的简短答案似乎是否定的。Flutter驱动程序(集成测试)只能与UIAFAIK交互。它不能拦截对插件的调用。它用于从UI测试整个应用程序。

然而

以下是拦截对插件的调用以进行测试的示例:

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;
  }
});

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

 类似资料:
  • 问题内容: 我已经使用了tycho-eclipse-plugin-archetype中的原型来创建带有工作集成测试项目的简单Eclipse插件。除了…不是。 当我以“ JUnit插件测试”启动任何测试时,会出现以下异常: (以及其他插件的一些类似消息。) 这很奇怪,因为我的目标平台包含3.4.300,而不是3.4.500,它需要版本[3.3.0,4.0.0)。测试用例的运行配置与此版本一致,并证明

  • 问题内容: 我在使用Eclipse Neon M7来使JUnit插件测试正常工作时遇到了一些问题,我真的很希望来自使用测试的任何人的输入(必须有人来,对吗?)。 每当我开始在Eclipse Luna中运行的测试(但在Mars中却没有,我认为这是一个错误)并且继续使用Tycho进行工作时,都会得到以下异常: 显然,这不是Eclipse错误,但我做错了。没有迹象表明测试中会启动哪种插件,但是从版本范围

  • 我注意到flutter web不支持诸如< code>path_provider 、< code>firebase_messaging 、< code>google_fonts等Flutter插件(该插件仍处于测试阶段)。有没有人能提供一些关于如何在支持的平台上使用这个插件的见解,并防止他们在不支持的平台上破坏应用程序? < li >在不受支持的平台上,是否有任何标准或文档化的方法来妥善处理插件?

  • 从版本4.3.0开始,Cordova提供了保存和恢复平台和插件的能力。 这个特性允许开发者保存和恢复他们的app到一个已知的状态,而不用去检测所有平台和插件的源代码。 'save'命令存储app平台和插件的详细版本信息到config.xml里面。当一个'cordova prepare'命令发出,通过利用先前保存在config.xml里面的信息, 'restore'步骤就会自动执行。 下面场景,sa

  • 我在play商店上传了我的应用程序,但是当我为flutter应用程序创建IPA时,我收到了以下两个错误: 未处理的异常:MissingPluginException(在通道Ponnam Karthik/Flutter toast上找不到方法showToast的实现)

  • 我在尝试做一些我觉得应该很简单的事情,但是我不知道怎么做。 基本上,我有一个Jenkins主(在Linux上运行)和两个从,一个在Windows上,另一个在macOS上。 我想在所有3个平台上构建我的项目,并在所有3个平台上运行GTest测试。 我可以构建并运行测试,但是junit步骤似乎没有收集任何测试结果。 我试图把< code>post块放在任何地方,但是它就是不工作。如果我尝试将< cod