如何获取Bloc的事件流,验证BlocB是否正确向BlocA发送指定事件
解决方案
核心思路是通过Mock依赖的BlocA实例,直接验证add方法的调用行为,完全不需要依赖BlocA的内部实现,也不需要访问Bloc的私有属性。
前置准备
使用Bloc官方推荐的mocktail测试包创建Mock类,也可以使用mockito实现相同效果。
实现步骤
- 定义MockBlocA类
import 'package:mocktail/mocktail.dart'; class MockBlocA extends Mock implements BlocA {}
- 编写单元测试
void main() { group('BlocB测试', () { late BlocA mockBlocA; late BlocB blocB; // 注册事件的匹配值,用于后续方法调用验证 setUpAll(() { registerFallbackValue(FromBToAEvent()); }); setUp(() { mockBlocA = MockBlocA(); blocB = BlocB(blocA: mockBlocA); }); test('接收NotifyBlocA事件时会向BlocA发送FromBToAEvent', () { // 触发BlocB事件 blocB.add(NotifyBlocA()); // 验证BlocA的add方法被调用且参数符合预期 verify(() => mockBlocA.add(any<FromBToAEvent>())).called(1); }); }); }
方案说明
该测试完全只校验BlocB的对外交互逻辑,没有依赖BlocA的任何内部实现逻辑,符合单元测试的单一职责要求,不需要访问Bloc的私有属性即可完成验证。
内容的提问来源于stack exchange,提问作者hman_codes
相关产品推荐
相关产品推荐

