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:
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)); }}
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.
dart pub add dev:test dev:bloc_test
flutter pub add dev:test dev:bloc_test
Commençons par créer le fichier counter_bloc_test.dart
afin de tester notre CounterBloc
et importons le package de test.
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.
void main() { group(CounterBloc, () {
});}
Commençons par créer une instance de notre CounterBloc
qui sera utilisée dans tous nos tests.
group(CounterBloc, () { late CounterBloc counterBloc;
setUp(() { counterBloc = CounterBloc(); });});
Maintenant, nous pouvons commencer à écrire des tests unitaires.
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.
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.