Я недавно начал испытывать трепетание, но как только я собирался написать несколько тестов виджетов, я заметил, что не очень уверен, как макетировать пакет Google Maps Flutter.
Многие примеры, которые я видел, включают использование библиотеки "mockito" для макетирования классов, но это предполагает, что виджет Google Maps будет вставлен в виджет для тестирования. К сожалению, с их документацией и руководством по запуску, это не представляется возможным:
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
является обязательной функцией, и эта функция использует метод закрытого класса (предоставьте родительскому виджету доступ к GoogleMapsController
). Многие другие примеры ложных функций mockito, у которых нет такой функции обратного вызова для установки состояния.
Похоже, что я не видел других пакетов, которые могли бы эффективно смоделировать виджет GoogleMaps, поэтому у меня нет никакого примера для подражания. В идеале я ожидал такого поведения, как proxyquire или sinon в node.s (где вам не нужно передавать макетированные библиотеки в function.constructors), но похоже, что макетированные классы должны быть переданы в проверенные виджеты.
Есть ли другие идеи о том, как макетировать эту библиотеку для тестирования? Или я должен просто жить с тестированием реальной функциональности?