最新Java Cucumber Maven(JUnit5)项目EventListener注册方案咨询
Cucumber 7.14.0 注册自定义EventListener监听器方案
由于Cucumber 7+已移除@CucumberOptions,注册自定义监听器需通过插件配置实现,以下是几种可行方式:
1. Maven Surefire插件配置(推荐)
在项目pom.xml的maven-surefire-plugin中添加Cucumber插件参数,指定自定义监听器的全类名:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <!-- 可根据需求调整版本 --> <configuration> <includes> <include>**/RunCucumberTest.java</include> </includes> <systemPropertyVariables> <!-- 多个插件用逗号分隔,pretty为默认控制台输出插件 --> <cucumber.plugin>hellocucumber.MyListener, pretty</cucumber.plugin> </systemPropertyVariables> </configuration> </plugin> </plugins> </build>
2. 命令行参数传递
直接在Maven测试命令中指定监听器:
mvn test -Dcucumber.plugin="hellocucumber.MyListener, pretty"
3. cucumber.properties配置文件
在src/test/resources目录下创建cucumber.properties文件,添加配置:
cucumber.plugin=hellocucumber.MyListener, pretty
自定义监听器类注意事项
- 必须包含无参构造函数,Cucumber会通过反射实例化监听器
- 正确实现
EventListener接口,通过setEventPublisher注册需要监听的事件,示例代码:
package hellocucumber; import io.cucumber.plugin.EventListener; import io.cucumber.plugin.event.EventPublisher; import io.cucumber.plugin.event.TestRunStarted; import io.cucumber.plugin.event.TestRunFinished; import io.cucumber.plugin.event.ScenarioFinished; public class MyListener implements EventListener { @Override public void setEventPublisher(EventPublisher publisher) { // 监听测试运行开始 publisher.registerHandlerFor(TestRunStarted.class, event -> System.out.println("测试执行开始") ); // 监听单个场景结束 publisher.registerHandlerFor(ScenarioFinished.class, event -> System.out.printf("场景「%s」执行结束,结果:%s%n", event.getScenario().getName(), event.getResult().getStatus()) ); // 监听所有测试结束 publisher.registerHandlerFor(TestRunFinished.class, event -> System.out.println("所有测试执行结束") ); } }
内容的提问来源于stack exchange,提问作者user22566874
相关产品推荐
相关产品推荐

