You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Bloc的事件流,验证BlocB是否正确向BlocA发送指定事件

解决方案

核心思路是通过Mock依赖的BlocA实例,直接验证add方法的调用行为,完全不需要依赖BlocA的内部实现,也不需要访问Bloc的私有属性。

前置准备

使用Bloc官方推荐的mocktail测试包创建Mock类,也可以使用mockito实现相同效果。

实现步骤

  1. 定义MockBlocA类
import 'package:mocktail/mocktail.dart';

class MockBlocA extends Mock implements BlocA {}
  1. 编写单元测试
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:30:01