代码之家  ›  专栏  ›  技术社区  ›  Gowtham

在Widget测试用例中未初始化Blob

  •  0
  • Gowtham  · 技术社区  · 3 年前

    我使用Flutter中的Container和Text小部件创建了一个基本示例,还为我的示例引入了一个测试用例。然而,在测试运行过程中(小部件测试用例),我遇到了一个null异常,因为块没有初始化。为了方便您,我已将样品包括在内。有解决这个问题的办法吗?

    main.dart

    import 'package:flutter/material.dart';
    import 'package:flutter_bloc/flutter_bloc.dart';
    import 'package:widget_test_case/bloc/resize_bloc.dart';
    
    void main() => runApp(BlocProvider<ResizeBloc>(
          create: (c) => ResizeBloc(),
          child: MyApp(),
        ));
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: BlocBuilder<ResizeBloc, ResizeState>(builder: (context, state) {
              if (state is SelectinState) {
                return Builder(builder: (c) {
                  return Center(
                    child: GestureDetector(
                        onTap: () {
                          BlocProvider.of<ResizeBloc>(context).add(DummyEvent());
                        },
                        child: Text('State: ${state.items}')),
                  );
                });
              }
              return GestureDetector(
                onTap: () {
                  BlocProvider.of<ResizeBloc>(context).isSelected.value++;
                  BlocProvider.of<ResizeBloc>(context).add(SelectinEvent('items'));
                },
                child: ValueListenableBuilder(
                  valueListenable: BlocProvider.of<ResizeBloc>(context).isSelected,
                  builder: (context, value, child) => Center(
                    child: Column(
                      children: [
                        Container(
                          color: Colors.red,
                          width: 100,
                          height: 100,
                        ),
                        Text(
                            '${BlocProvider.of<ResizeBloc>(context).isSelected.value}')
                      ],
                    ),
                  ),
                ),
              );
            }),
          ),
        );
      }
    }
    
    

    测试用例

    import 'package:flutter_bloc/flutter_bloc.dart';
    import 'package:flutter_test/flutter_test.dart';
    import 'package:mockito/mockito.dart';
    import 'package:widget_test_case/bloc/resize_bloc.dart';
    import 'package:widget_test_case/main.dart';
    
    class TestBlocMock extends Mock implements ResizeBloc {}
    
    void main() {
      ResizeBloc testBloc = TestBlocMock();
    
      group('description', () {
        testWidgets('Test', (WidgetTester tester) async {
          when(testBloc.stream).thenAnswer(
            (_) => Stream.fromIterable(
              [ResizeInitial()],
            ),
          );
    
          await tester.pumpWidget(
              BlocProvider<ResizeBloc>(create: (c) => testBloc, child: MyApp()));
          expect(find.text('State: itmes'), findsNWidgets(0));
        });
      });
    }
    
    
    0 回复  |  直到 3 年前