我在flutter中创建了一个cubit测试项目,它工作正常,但是当我用mockito编写一个UI测试用例时,它会抛出以下错误。 'Null' 不是 typecast 中类型 'Stream' 的子类型。如果真实对象正在通过,那么单元测试工作正常。
我的Cubit 我的Cubit = 我的Cubit(); //真实对象与UT正常工作
MyCubit myCubit = MockMyCubit(); //模拟对象不能与 UT 一起正常工作。
以前,当我没有升级我的颤振时,相同的代码正在使用mockito 。我也尝试过使用mockito来模拟Stream ,但它也没有用。
我的代码如下
颤振依赖
flutter_bloc: ^8.0.1
mockito: ^5.1.0
my_cubit.dart
class MyCubit extends Cubit<int> {
MyCubit() : super(0);
void increment() {
emit(state + 1);
}
void decrement() {
emit(state - 1);
}
}
主要.dart
void main() {
MyCubit myCubit = MyCubit();
runApp(MyAppParent(myCubit));
}
class MyAppParent extends StatelessWidget {
MyAppParent(this.myCubit);
MyCubit myCubit;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('test'),
),
body: BlocProvider<MyCubit>(
create: (_) => myCubit,
child: MyApp(),
),
),
);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
MyCubit myCubit = context.read<MyCubit>();
return Column(
children: [
BlocBuilder<MyCubit, int>(bloc: myCubit, builder: (BuildContext context, int count) {
return Text('$count');
}),
TextButton(
onPressed: () {
myCubit.increment();
},
child: const Text('Increment'),
),
TextButton(
onPressed: () {
myCubit.decrement();
},
child: const Text('Decrement'),
)
],
);
}
}
widget_test.dart
class MockedMyCubit extends Mock implements MyCubit {}
void main() {
testWidgets('Testing', (WidgetTester tester) async {
MyCubit myCubit = MockMyCubit(); //fake object is not working, throwing exception
// when(myCubit.stream).thenAnswer((_) => StreamController<int>.broadcast().stream);
// MyCubit myCubit = MyCubit(); //real object working fine
await tester.pumpWidget(MyAppParent(myCubit));
Finder finderCount = find.text('0');
expect(finderCount, findsOneWidget);
Finder finderIncrement = find.text('Increment');
Finder finderDecrement = find.text('Decrement');
await tester.tap(finderIncrement);
await tester.pump();
Finder finderCount1 = find.text('1');
expect(finderCount1, findsOneWidget);
await tester.tap(finderDecrement);
await tester.pump();
Finder finderCount0 = find.text('0');
expect(finderCount0, findsOneWidget);
});
}