gpt4 book ai didi

google-maps - 如何模拟 'google_maps_flutter' 包进行 flutter 测试?

转载 作者:行者123 更新时间:2023-12-03 17:30:56 25 4
gpt4 key购买 nike

我最近开始接触 Flutter,但就在我准备编写一些小部件测试时,我注意到我不太确定如何模拟 Google Maps Flutter 包。

我见过的许多例子包括使用库“mockito”来模拟类,但这假设谷歌地图小部件将被注入(inject)到要测试的小部件中。不幸的是,根据他们给定的文档和启动指南,这似乎不太可能:

class MapsDemo extends StatefulWidget {
@override
State createState() => MapsDemoState();
}

class MapsDemoState extends State<MapsDemo> {

GoogleMapController mapController;

@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(15.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Center(
child: SizedBox(
width: 300.0,
height: 200.0,
child: GoogleMap(
onMapCreated: _onMapCreated,
),
),
),
RaisedButton(
child: const Text('Go to London'),
onPressed: mapController == null ? null : () {
mapController.animateCamera(CameraUpdate.newCameraPosition(
const CameraPosition(
bearing: 270.0,
target: LatLng(51.5160895, -0.1294527),
tilt: 30.0,
zoom: 17.0,
),
));
},
),
],
),
);
}

void _onMapCreated(GoogleMapController controller) {
setState(() { mapController = controller; });
}
}

请注意 GoogleMaps小部件无法传入,因为 onMapCreated是必需的函数,并且该函数依赖于私有(private)类方法(授予父窗口小部件对 GoogleMapsController 的访问权限)。没有这种回调函数来设置状态的 mockito 模拟函数的许多其他示例。

似乎没有任何其他我见过的包可以有效地模拟 GoogleMaps 小部件,所以我真的没有任何例子可以效仿。理想情况下,我期待的是某种行为,例如 node.s 中的 proxyquire 或 sinon(您不需要将模拟库传递给 function.constructors),但看起来模拟类需要传递到测试的小部件。

关于如何模拟这个库进行测试还有其他想法吗?还是我应该只测试实际功能?

最佳答案

我设法通过模拟它使用的 channel 来模拟谷歌地图:

setUpAll(() async {
SystemChannels.platform_views.setMockMethodCallHandler((MethodCall call) {
switch (call.method) {
case 'create':
return Future<int>.sync(() => 1);
default:
return Future<void>.sync(() {});
}
});

MethodChannel('plugins.flutter.io/google_maps_0', StandardMethodCodec())
.setMockMethodCallHandler((MethodCall methodCall) async {
return null;
});
}
我从这个 webview 插件获得灵感 test (类似于 GoogleMaps 小部件的 PlatformView),以及这个 GoogleMaps 插件 test

关于google-maps - 如何模拟 'google_maps_flutter' 包进行 flutter 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274520/

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