TestNG的监听器(listener)是一系列的接口,用于在运行时设置动态参数,以改变TestNG的执行过程。TestNG的所以监听器都是org.testng.ITestNGListener接口的实现。
1. 常见的TestNG提供的监听器接口如下:
IAnnotationTransformer IAnnotationTransformer2 IAnnotationTransformer3 IHookable IInvokedMethodListener IInvokedMethodListener2 IMethodInterceptor IReporter ISuiteListener ITestListener |
我们将在后续文章中详细介绍这些监听器的具体用法,这里只介绍在TestNG中使用监听器的方法。
2. 在TestNG中使用监听器可以有如下方式:
启动TestNG的命令行中给出-listener参数
在testng.xml配置文件中设置<listeners>
在测试类中设置@Listeners标注
利用Java SPI接口的实现机制
1).命令行中给出-listener参数
java org.testng.TestNG -listener <com.ericsson.MyListenerImpl> testng.xml |
对于具体的一个监听器实现类,临时用于一次测试,可以通过这种方式设置测试执行的监听器。
2).testng.xml配置文件中设置<listeners>
<suite> ... <listeners> <listener class-name="com.ericsson.MyListener" /> <listener class-name="com.ericsson.MyMethodInterceptor" /> </listeners> ... |
这种方式可以设置多个监听器。
3).为测试类设置@Listeners标注
@Listeners({ com.ericsson.MyListener.class, com.ericsson.MyMethodInterceptor.class }) public class MyTest { // ... } |
这种方式可以设置多个监听器。
事实上,这种方式与在testng.xml配置文件中设置<listeners>是等价的。虽然只是在一个测试类中设置监听器,但是监听器作用于该测试类所在的整个测试执行过程中。
4).Java SPI接口的实现的监听器
从Java 6开始,为了支持更加灵活的、对服务的扩展(对服务接口的独立实现),JDK提供了java.util.ServiceLoader<S>类。该类能够在运行时动态加载第三方提供的服务实现,而无需预先进行任何的代码级编译集成。从而实现了服务接口与服务实现的完全松耦合。具体请参考Java Doc。
通过SPI机制,我们只要开发自己的TestNG的监听器实现类;然后在该实现类的同级目录中创建“META-INF/services/org.testng.ITestNGListener”,即声明监听器实现类说实现的服务接口;最后将目录打包为jar文件,在运行TestNG执行时加入该jar到classpath中即可。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。