Aller au contenu

Tester

Bloc a été conçu pour être extrêmement facile à tester. Dans cette section, nous allons voir comment tester un bloc de manière unitaire.

Par souci de simplicité, nous allons écrire des tests pour le CounterBloc que nous avons créé dans Core Concepts.

Pour rappel, l’implémentation du CounterBloc ressemble à ceci:

counter_bloc.dart
sealed class CounterEvent {}
final class CounterIncrementPressed extends CounterEvent {}
final class CounterDecrementPressed extends CounterEvent {}
class CounterBloc extends Bloc<CounterEvent, int> {
CounterBloc() : super(0) {
on<CounterIncrementPressed>((event, emit) => emit(state + 1));
on<CounterDecrementPressed>((event, emit) => emit(state - 1));
}
}

Configuration

Avant de commencer à écrire nos tests, nous avons besoin d’ajouter des framework de test dans nos dépendances,

Nous allons ajouter les packages test et bloc_test à notre projet.

Terminal window
dart pub add dev:test dev:bloc_test

Tester

Commençons par créer le fichier counter_bloc_test.dart afin de tester notre CounterBloc et importons le package de test.

counter_bloc_test.dart
import 'package:test/test.dart';
import 'package:bloc_test/bloc_test.dart';

Ensuite, nous devons créer notre main ainsi que notre groupe de tests.

counter_bloc_test.dart
void main() {
group(CounterBloc, () {
});
}

Commençons par créer une instance de notre CounterBloc qui sera utilisée dans tous nos tests.

counter_bloc_test.dart
group(CounterBloc, () {
late CounterBloc counterBloc;
setUp(() {
counterBloc = CounterBloc();
});
});

Maintenant, nous pouvons commencer à écrire des tests unitaires.

counter_bloc_test.dart
group(CounterBloc, () {
late CounterBloc counterBloc;
setUp(() {
counterBloc = CounterBloc();
});
test('initial state is 0', () {
expect(counterBloc.state, equals(0));
});
});

À ce stade, nous devrions avoir notre premier test réussi! Écrivons maintenant des tests plus complexes en utilisant le package bloc_test.

counter_bloc_test.dart
blocTest(
'emits [1] when CounterIncrementPressed is added',
build: () => counterBloc,
act: (bloc) => bloc.add(CounterIncrementPressed()),
expect: () => [1],
);
blocTest(
'emits [-1] when CounterDecrementPressed is added',
build: () => counterBloc,
act: (bloc) => bloc.add(CounterDecrementPressed()),
expect: () => [-1],
);

Nous devrions être en mesure d’exécuter les tests et de constater qu’ils passent tous.

C’est aussi simple que ça, tester devrait être un jeu d’enfant et nous devrions nous sentir en confiance lorsque nous apportons des modifications et que nous refactorisons notre code.

Vous pouvez vous référer à l’application Weather App pour un exemple d’application entièrement testée.