Ein Unit-Test prüft eine kleine Regel ohne Oberfläche. Ein Widget-Test baut eine Oberfläche und löst Benutzeraktionen aus. Beide sollen eine fachliche Erwartung ausdrücken. Ein Test, der lediglich die Implementierung nacherzählt, kann denselben Fehler wiederholen. Wir prüfen einen Zähler aus Tutorial 09 und betrachten anschließend die echten Service- und PDF-Tests von Fahrzeugakte.
01Den Ausgangsbildschirm herstellen
Verwende main.dart aus Tutorial 09 im Lernprojekt. Lege test/counter_test.dart an. Der Import ../lib/main.dart verweist auf diesen Bildschirm. flutter_test ist im Flutter-Projekt als Entwicklungsabhängigkeit verfügbar.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import '../lib/main.dart';
void main() {
testWidgets('adding an entry changes the displayed count', (tester) async {
await tester.pumpWidget(const MaterialApp(home: CounterScreen()));
expect(find.text('Entries: 0'), findsOneWidget);
await tester.tap(find.text('Add entry'));
await tester.pump();
expect(find.text('Entries: 1'), findsOneWidget);
expect(find.text('Entries: 0'), findsNothing);
});
}
Starten / prüfen
flutter test test/counter_test.dart02Vorher und nachher prüfen
pumpWidget baut die Oberfläche. find.text sucht sichtbaren Text. tap löst den Klick aus. pump verarbeitet den folgenden Frame. Vor der Aktion erwarten wir 0, danach 1. Ohne die zweite Prüfung könnte ein untätiger Button unbemerkt bleiben.
03Fehlerfälle aus Fachregeln ableiten
Teste für Services leere Namen, ungültige Stände und einen fehlschlagenden Speicher. Die echte Suite prüft auch Backup-Passwörter, PDF-Anhänge und Transaktionsgrenzen. Mocks sind sinnvoll für kontrollierte Fehler. Echte Datenbanktests prüfen zusätzlich das Verhalten des Adapters.
04Den Test gezielt fehlschlagen lassen
Ändere count++ im Bildschirm zu count += 2. Der Test muss fehlschlagen. Setze die Änderung anschließend zurück. Ein Test ist nur dann ein hilfreicher Nachweis, wenn er eine konkrete falsche Änderung entdeckt.
flutter test test/counter_test.dart besteht. Bei Erhöhung um 2 schlägt die Erwartung Entries: 1 fehl.
Deine Übung
Ergänze einen zweiten Klick und prüfe die Anzeige Entries: 2.
Lösung mit Erklärung anzeigen
Führe tap und pump erneut aus und erwarte findsOneWidget für Entries: 2. Prüfe zusätzlich, dass Entries: 1 nicht mehr existiert. So wird das sichtbare Verhalten über mehrere Aktionen bestätigt.
Projektbezug und Quellen
Das Beispiel ist zum Lernen vereinfacht. Die verlinkte Codeversion zeigt die Anwendung im Projekt und die dortigen Prüfungen.