Unit testing 集成测试中如何模拟BLoC

Unit testing 集成测试中如何模拟BLoC,unit-testing,flutter,mocking,integration-testing,bloc,Unit Testing,Flutter,Mocking,Integration Testing,Bloc,我有一个flatter应用程序,它使用bloc和flatter\u bloc包。我正在尝试使用flatter\u driver和mockito编写一个集成测试。如何模拟BlocProvider及其子级始终发出单个模拟状态 最初的集团: class SummaryBloc扩展了Bloc{ 最终总结存储库; SummaryBloc(this.repository); @凌驾 BlocState get initialState=>blocstatempty(); @凌驾 流映射事件状态( 女衬衫事件

我有一个flatter应用程序,它使用
bloc
flatter\u bloc
包。我正在尝试使用
flatter\u driver
mockito
编写一个集成测试。如何模拟
BlocProvider及其子级始终发出单个模拟状态

最初的集团:

class SummaryBloc扩展了Bloc{
最终总结存储库;
SummaryBloc(this.repository);
@凌驾
BlocState get initialState=>blocstatempty();
@凌驾
流映射事件状态(
女衬衫事件,
)异步*{
如果(事件为Fetch),则生成blocstatesucture(repository.getSummary());
}
}
我试着模仿这个集团并覆盖
状态
getter:

class MockSummaryBloc扩展了Mock实现SummaryBloc{}
然后在插入指令的应用程序中使用mockito:

final MockSummaryBloc summaryBloc=MockSummaryBloc();
//无论何时调用状态流getter,都返回模拟流。
when(summaryBloc.state).thenAnswer(_)async*{
收益率BlocStateSucture(模拟汇总);
});
为了更好地衡量,我在
initialState
中尝试了同样的方法

要在插入指令的应用程序中使用mock,我使用
BlocProvider.value

runApp(BlocProvider.value(
值:summaryBloc,
孩子:MaterialApp(
标题:“试驾”,
家:脚手架(
正文:BlocBuilder(
集团:峰会集团,
//生成器将在状态更改时重建。
生成器:(上下文、状态){
返回文本('state:${state?.runtimeType???'isNull'}');
},
)),
),
));
我希望文本小部件在运行时打印
blocstatesucture
。但是,在驱动程序测试的有效期内,状态为空


我是不是在错误地嘲笑这个集团?是否有其他模拟一个Bloc或
流的方法?

您应该尝试模拟
摘要存储库而不是Bloc。这将允许您测试bloc的行为,并保持对存储库返回到流的内容的控制

class MockSummaryRepository extends Mock implements SummaryRepository{}

var mockRepository = MockSummaryRepository();
when(mockRepository.getSummary()).thenReturn(mockSummary);

final SummaryBloc summaryBloc = SummaryBloc(mockRepository);

您能提供SummaryBloc类的定义吗?谢谢,我已经添加了它。SummaryRepository的实现应该是不必要的,所以我省略了它。谢谢。
MockSummaryBloc
的定义是什么?