gpt4 book ai didi

java - Gradle 忽略 testng 中的优先级

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:28 25 4
gpt4 key购买 nike

有人可以解释一下 gradle 如何与 testng 中的 @Test 注释中的 priority 参数一起使用吗?例如我有下一个代码:

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

但我想,它应该是这样的:

Test B
Test A
Test C

最佳答案

我认为这是 TestNG 中的一个错误。我创建了一个issue 。7.5及以上版本已修复。

<小时/>

您可以创建一个解决方法来解决此问题。使用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 {
...

注意:您还可以使用此类拦截器来实现自定义执行顺序。

关于java - Gradle 忽略 testng 中的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com