Java 在运行测试方法之前必须调用一次IMethodInterceptor吗?

Java 在运行测试方法之前必须调用一次IMethodInterceptor吗?,java,testng,Java,Testng,据我所知,方法拦截器可用于根据优先级构建正在运行的方法列表。但是在我的项目中,方法拦截器为每个测试类的测试方法运行。例如,有两个类被放在方法SetTestClass中。在第一类中有3种测试方法(具有相似的优先级)。在第二个中有一个(具有最高优先级)。在这种情况下,具有最高优先级的方法将最晚运行,因为方法拦截器将首先为来自第一类的3个方法运行,其次为来自第二类的方法运行。它是正确的吗?什么方法拦截器?它按列表给出方法列表。在方法拦截器的拦截器方法中,可以对列表重新排序并返回列表对象。因此,在执行过

据我所知,方法拦截器可用于根据优先级构建正在运行的方法列表。但是在我的项目中,方法拦截器为每个测试类的测试方法运行。

例如,有两个类被放在方法SetTestClass中。在第一类中有3种测试方法(具有相似的优先级)。在第二个中有一个(具有最高优先级)。在这种情况下,具有最高优先级的方法将最晚运行,因为方法拦截器将首先为来自第一类的3个方法运行,其次为来自第二类的方法运行。它是正确的吗?

什么方法拦截器?它按列表给出方法列表。在方法拦截器的拦截器方法中,可以对列表重新排序并返回列表对象。因此,在执行过程中,Testng将使用修改后的列表。在原始列表的staid中输入截取方法。这就是testng中方法拦截器的使用。它不处理这个级别的优先级。 当然,您可以使用methodinterceptor,通过实现methodinterceptor,将测试列表重新排序为优先级

请参见下面的示例代码以了解说明

public class methodSortingListner implements IMethodInterceptor {
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
    List<IMethodInstance> result = new ArrayList<IMethodInstance>();
    for (IMethodInstance method : methods) {
          if(<your logic here>)
          {
             result.add(method);
          }
    }

 return result;

}
公共类方法SortingListner实现了IMethodInterceptor{
公共列表截取(列表方法、ITestContext上下文){
列表结果=新建ArrayList();
对于(i方法:方法){
if()
{
结果:添加(方法);
}
}
返回结果;
}
这将给出一个适合您逻辑的列表,该列表将由testng执行

谢谢,,
Dharshana。

是的,我理解。但在我的情况下,我的拦截器不会为每个测试类调用一次。这就是问题所在。您是否使用testng.xml执行。在testng.xml中,如果类列在同一标记中,它将作为一次执行。我在有问题地执行testng时也经历过这种情况。在我的项目中,所有测试都设置为以编程方式,我无权更改此设置。在我的情况下,是否有可能只运行一次拦截器?如果我们以编程方式实现testng.xml,这将按照类运行。我认为您可以通过修改用于执行testng测试的类来解决此问题。