Widget test en Flutter: ejercicio resuelto
Si te interesa testing en Flutter, este ejercicio te enseña a validar una interacción de UI con flutter_test.
Enunciado
Testea un contador para comprobar que al pulsar el botón aumenta de 0 a 1.
Solución en Flutter
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
class CounterWidget extends StatefulWidget {
const CounterWidget({super.key});
@override
State<CounterWidget> createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
int count = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(
children: [
Text('$count'),
ElevatedButton(onPressed: () => setState(() => count += 1), child: const Text('Sumar')),
],
),
),
);
}
}
void main() {
testWidgets('incrementa contador al pulsar', (tester) async {
await tester.pumpWidget(const CounterWidget());
expect(find.text('0'), findsOneWidget);
await tester.tap(find.text('Sumar'));
await tester.pump();
expect(find.text('1'), findsOneWidget);
});
}Resultado esperado
El test pasa y asegura que la interacción principal sigue funcionando.
Errores frecuentes
- No usar
pumpdespués de interacciones. - Escribir tests demasiado acoplados al layout.
- No cubrir casos básicos de error o estado inicial.
Aplicación práctica
Los widget tests reducen regresiones y ahorran tiempo en refactors de interfaz.
Siguiente ejercicio recomendado
Práctica guiada y siguiente paso
- Más ejercicios de Flutter
- Ejercicios C para reforzar fundamentos
- Programación en C en 100 ejercicios resueltos
- Ver el libro en Amazon (incluido en Kindle Unlimited)
- Suscribirte a la newsletter
FAQ
¿Qué diferencia hay entre unit test y widget test en Flutter?
El unit test valida lógica aislada; el widget test valida comportamiento de componentes visuales.
¿Son suficientes los widget tests?
No siempre. Para flujos completos también conviene test de integración.
¿Cuándo empezar a testear en un proyecto Flutter?
Desde el inicio, al menos en casos críticos de UI y lógica de negocio.