آزمایش کردن (Testing)
Bloc به گونه ای طراحی شده است که آزمایش آن بسیار آسان باشد.در این بخش، نحوه تست واحد (Unit Test) یک بلوک را توضیح خواهیم داد.
به خاطر سادگی، بیایید تست ها را برای CounterBloc
که در مفاهیم اصلی ایجاد کردیم بنویسیم.
برای خلاصهی مطلب، پیادهسازی CounterBloc
به شکل زیر است:
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)); }}
قبل از شروع نوشتن تست های خود، باید یک چارچوب آزمایشی (Testing Framework) را به وابستگی های خود اضافه کنیم.
ما باید test و bloc_test را به پروژه خود اضافه کنیم.
dart pub add dev:test dev:bloc_test
flutter pub add dev:test dev:bloc_test
بیایید با ایجاد فایل تست برای CounterBloc
، به نام counter_bloc_test.dart
، شروع کنیم و بسته تست را وارد کنیم.
import 'package:test/test.dart';import 'package:bloc_test/bloc_test.dart';
بعداز آن، باید main
و گروه تست خود را ایجاد کنیم.
void main() { group(CounterBloc, () {
});}
بیایید با ایجاد نمونهای از CounterBloc
خود که در تمامی تستهایمان استفاده خواهد شد، شروع کنیم.
group(CounterBloc, () { late CounterBloc counterBloc;
setUp(() { counterBloc = CounterBloc(); });});
حالا میتوانیم شروع به نوشتن تستهای فردی خود کنیم.
group(CounterBloc, () { late CounterBloc counterBloc;
setUp(() { counterBloc = CounterBloc(); });
test('initial state is 0', () { expect(counterBloc.state, equals(0)); });});
در این نقطه باید تست اولیه ما را پاس کرده باشیم! حالا بیایید یک تست پیچیدهتر را با استفاده از بسته 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],);
باید بتوانیم تستها را اجرا کنیم و ببینیم که همه آنها پاس میشوند.
این تمام چیزی است که در آن وجود دارد، آزمایش باید سریع باشد و ما باید هنگام ایجاد تغییرات و بازسازی کد خود احساس اطمینان کنیم.
شما میتوانید به برنامه Weather App مراجعه کنید تا یک مثال از یک برنامه کاملاً تست شده را ببینید.