TestNg提供了监听器和拦截器的几个接口供我们自己开发扩展,通过实现这些接口,来自定义我们在测试中想要的行为
接口列表:
- IAnnotationTransformer (doc,
javadoc) - IAnnotationTransformer2 (doc,
javadoc) - IHookable (doc,
javadoc) - IInvokedMethodListener (doc, javadoc)
- IMethodInterceptor (doc,
javadoc) - IReporter (doc,
javadoc) - ISuiteListener (doc, javadoc)
- ITestListener (doc,
javadoc)
TestNg提供了三种方式来配置开发者自己的接口:
1.注解
在TestNg中提供了一个类级别的注解,@Listeners({*.class, *.class})
*.class就是我们自己实现的监听
这种方式在我们开发中比较常用
2.配置文件
在配置文件中我们可以通过
<listeners>
<listener class-name="全类名"></listener>
</listeners>
来进行插拔式配置,这种方式是更灵活的,比第一种写死在代码中更为方便
3.通过ServiceLoader的方式
这种方式是比较复杂的,它更多的使用于对在编写扩展框架时使用,比如我们对TestNg的增强,然后封装成框架,提供给别人使用
说到打包就不得不说的一个东西META-INF,其实我们在工程文件中经常看到这个它,但是似乎一部分人不大知道它的作用,
在研究TestNg这个功能之前,我也是属于这一部分人中的
下面先说META-INF
它包含了如下文件/文件夹
1.MANIFEST.MF ----- 定义一些扩展和打包相关的数据
2.INDEX.LIST ------ 这文件是在jar 工具打包的时候 使用 ‘ -i ‘ 选项来生成的,它包含了应用程序或扩展包中的位置声明,它是JarIndex实现的一部分,通常被类加载器用来加速类的加载过程
3.x.SF ------ jar文件的签名文件
4.x.DSA ------ 签名块文件,用同样的文件名关联着签名文件,这个文件存储了签名摘要和签名文件是一样的。
5.services/ ------ 这个目录用来存储所有的业务供应源的配置文件
上述的这些文件或文件夹可以被Java 2 平台自动的识别和解读并配置到应用程序、扩展、类加载器和业务中
接下来我们要做的就是把我们写好的接口扩展实现类(.class),和META-INF中放在同一个目录下,记得类如果带有包名,那么和META-INF同级的是包的根目录
然后我们在META-INF中创建services文件夹,在其中创建一个文件,文件名为我们实现的接口的名称,文件内容写的是我们的实现类的完整目录
将META-INF和类文件打包生成jar文件
此时就完成了,我们只需要把生成的jar包添加到项目中就可以了。
注:如果我们在IDE中操作,那么我们需要注意哦,如果你把写好的实现类复制出来打包又引入回去的话,,,其实这个时候,源码的中的代码是会覆盖jar包中的代码执行的