gpt4 book ai didi

plugins - MethodCall 列表在 Flutter 插件单元测试中的用途

转载 作者:IT王子 更新时间:2023-10-29 07:11:09 25 4
gpt4 key购买 nike

创建插件时的默认单元测试设置如下所示:

void main() {
const MethodChannel channel = MethodChannel(
'com.example/my_plugin');

setUp(() {
channel.setMockMethodCallHandler((MethodCall methodCall) async {
return '42';
});
});

tearDown(() {
channel.setMockMethodCallHandler(null);
});

test('getPlatformVersion', () async {
expect(await MyPlugin.platformVersion, '42');
});
}

然而,在很多源代码中我看到人们使用 List<MethodCall>称为 log .这是一个 example :

  test('setPreferredOrientations control test', () async {
final List<MethodCall> log = <MethodCall>[];

SystemChannels.platform.setMockMethodCallHandler((MethodCall methodCall) async {
log.add(methodCall);
});

await SystemChrome.setPreferredOrientations(<DeviceOrientation>[
DeviceOrientation.portraitUp,
]);

expect(log, hasLength(1));
expect(log.single, isMethodCall(
'SystemChrome.setPreferredOrientations',
arguments: <String>['DeviceOrientation.portraitUp'],
));
});

我理解 setMockMethodCallHandler 的 mock ,但是当你可以只使用一个时,为什么要使用一个 MethodCall 列表呢?如果这只是一个案例,我可能不会太在意,但我在源代码中反复看到这种模式。

最佳答案

我认为重点是验证方法调用处理程序是否恰好被触发一次(因此恰好添加(“记录”)到 List<MethodCall> 中的一个条目)。如果它只是一个 MethodCallnull 更改的变量到非 null , 验证它没有被多次触发就没那么简单了。

关于plugins - MethodCall 列表在 Flutter 插件单元测试中的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56746099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com