您的当前位置:首页正文

3月Flutter小报|读小报,涨知识

2024-11-07 来源:个人技术集锦

本期内容

Flutter如何Mock MethodChannel进行单元测试

在做Flutter单元测试的时候,有时候我们会遇到Flutter Widget的某个方法调用了Platform的方法,这时候就需要Mock这个MethodChannel来消除依赖,否则测试用例执行到Channel的方法就会抛出异常。

1. 获取TestDefaultBinaryMessenger

在测试环境下,Flutter给我们提供了TestDefaultBinaryMessenger来拦截MethodChannel,所以我们需要先获取到它。

/// 依赖WidgetTester,需要在测试用例中获取
testWidgets('one test case', (widgetTester) async {
  final TestDefaultBinaryMessenger messenger = 
    widgetTester.binding.defaultBinaryMessenger;
});

/// 通过单例获取,写在setUp中可以在所有测试用例执行前运行
setUp(() {
    final TestDefaultBinaryMessenger messenger = 
      TestDefaultBinaryMessengerBinding.instance!.defaultBinaryMessenger;
}
2. Mock Flutter与Platform间的相互调用
  • • Flutter调用Platform方法:

    • • TestDefaultBinaryMessenger#setMockMethodCallHandler,第一个参数是需要拦截的MethodChannel,第二个参数是Function表示Mock调用。

    • • TestDefaultBinaryMessenger#allMessagesHandler,和上面类似,但这里是拦截所有的MethodChannel,并且,此项设置后,setMockMethodCallHandler将不生效

  • • Platform调用Flutter方法:

    • • TestDefaultBinaryMessenger#handlePlatformMessage,第一个参数是MethodChannel名字,第二个参数是传给Flutter编码后的MethodCall,第三个参数是Flutter处理后结果的回调。

显示全文