有人可以解释gradle如何与testng中@Test注释中的 priority 参数一起使用吗? 例如,我有下一个代码:
var headers = document.querySelectorAll("thead:not([id='amazon-polly-audio-table-thead'])");
var tablebody = document.querySelectorAll("tbody:not([id='amazon-polly-audio-table-tbody'])");
因此,如果我将通过public class TestGradle {
@Test (priority = 2)
public void testA() throws Exception {
System.out.println("Test A");
}
@Test (priority = 1)
public void testB() throws Exception {
System.out.println("Test B");
}
@Test (priority = 3)
public void testC() throws Exception {
System.out.println("Test C");
}
}
运行它,则会得到下一个输出:
gradle test --tests TestGradle
但是我认为应该是这样的
Test A
Test B
Test C
答案 0 :(得分:0)
我认为这是TestNG中的错误。我创建了一个issue。
您可以创建解决方法来解决此问题。
使用IMethodInterceptor
,您可以更改方法的执行顺序。
public class ExecutionOrderInterceptor implements IMethodInterceptor {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
Comparator<IMethodInstance> comparator = new Comparator<IMethodInstance>() {
private int getPriority(IMethodInstance mi) {
int result = 0;
Method method = mi.getMethod().getConstructorOrMethod().getMethod();
Test a1 = method.getAnnotation(Test.class);
if (a1 != null) {
result = a1.priority();
}
return result;
}
public int compare(IMethodInstance m1, IMethodInstance m2) {
return getPriority(m1) - getPriority(m2);
}
};
IMethodInstance[] array = methods.toArray(new IMethodInstance[methods.size()]);
Arrays.sort(array, comparator);
return Arrays.asList(array);
}
}
要使用此拦截器,您需要在测试类中添加注释:
@Listeners({ TestReportListener.class })
public class MyTestClass {
...
您还可以创建测试类扩展的抽象类:
@Listeners({ TestReportListener.class })
public abstract class BaseTest {
//Add here common code
}
并在您的测试班级中使用它:
public class MyTestClass extends BaseTest {
...
注意:您还可以使用此类拦截器来实现自定义执行顺序。