Java单测中如何通过Map/列表遍历执行所有事件的测试流程
实现方案
给你两种常用实现方式,可根据你的项目JUnit版本和维护需求选择:
方案1:自定义列表遍历实现(简单直接,无框架依赖)
先封装参数实体存储每个事件的配置,再批量初始化遍历执行即可:
步骤1:定义参数存储实体
Java 16+ 可直接用record简化代码:
// 存储单个事件的所有测试配置 public record EventSchemaConfig( String eventName, // 事件名 String schemaName, // schema名 String schemaVersion, // schema版本号 EdmFixture eventFixture // 每个事件对应的测试数据,所有事件用同一个fixture可删除该字段 ) {}
Java 8~15版本写普通POJO类加getter方法即可。
步骤2:编写批量测试逻辑
@Test public void testAllEventsWithOldSchema() { // 初始化所有50个事件的配置,新增事件只需往该列表加配置即可 List<EventSchemaConfig> configList = List.of( new EventSchemaConfig("UsageEvent", "event.schema", "3.4.1", edmFixture), new EventSchemaConfig("OrderEvent", "order.schema", "2.1.0", orderEdmFixture), // 剩余48个事件配置依次补充在这里 new EventSchemaConfig("PayEvent", "pay.schema", "1.9.2", payEdmFixture) ); // 遍历执行所有事件的测试流程 for (EventSchemaConfig config : configList) { // 激活对应版本的schema LoadSchema.activateSchema(myMsvCli, config.eventName(), config.schemaName(), config.schemaVersion(), LOG); // 上报当前事件 postEvent(config.eventFixture()); // 校验推送结果,不同事件校验逻辑不同的话,可在校验方法里按eventName分支处理,也可把校验逻辑作为函数式接口存入EventSchemaConfig checkEventPushSuccess(config.eventName()); } }
方案2:JUnit 5 参数化测试(更推荐,单测场景下每个事件独立统计结果,报错直接定位对应事件)
用JUnit自带的参数化能力,不需要自己写遍历逻辑,每个事件用例独立执行:
// 提供所有事件的参数源,50个事件配置都在这里添加 static Stream<Arguments> eventSchemaConfigProvider() { return Stream.of( Arguments.of("UsageEvent", "event.schema", "3.4.1", edmFixture), Arguments.of("OrderEvent", "order.schema", "2.1.0", orderEdmFixture), // 剩余所有事件配置依次补充 Arguments.of("PayEvent", "pay.schema", "1.9.2", payEdmFixture) ); } // 绑定参数源,JUnit会自动遍历所有参数执行该测试方法 @ParameterizedTest @MethodSource("eventSchemaConfigProvider") public void testEventWithOldSchema(String eventName, String schemaName, String schemaVersion, EdmFixture eventFixture) { LoadSchema.activateSchema(myMsvCli, eventName, schemaName, schemaVersion, LOG); postEvent(eventFixture); checkEventPushSuccess(eventName); }
补充说明
- 如果所有事件的测试fixture是同一个,直接删除对应参数,方法里直接传公共的edmFixture即可
- 参数量大的场景可以把配置存在csv文件中,用JUnit的
@CsvFileSource注解加载,不需要硬编码在代码里
内容的提问来源于stack exchange,提问作者Fahd
相关产品推荐
相关产品推荐

