gpt4 book ai didi

java - testng - 创建 KnownFault 和 IntermittentFailure 注释

转载 作者:行者123 更新时间:2023-12-01 09:37:13 24 4
gpt4 key购买 nike

我想用 KnownFault 注释我的一些测试用例 - 这几乎可以完成预期异常的功能,并使用 YouTrack 的 REST API 进行一些魔法。我还希望有一个 IntermittentFailure 属性,这意味着我知道测试可能偶尔会失败并出现 [异常] [消息],但我不希望这阻止我的构建链的其余部分。

经过一些研究,我发现我的测试类应该实现 IHookable,然后我可以有这样的东西:

@Override
public void run(IHookCallBack callBack, ITestResult result) {
callBack.runTestMethod(result);
if (result.getThrowable().getCause() instanceof IllegalArgumentException){
System.out.println("This is expected.");
result.setThrowable(null);
}
else{
System.out.println("Unexpected exception");
}
}

问题在于 invokeHookable 的实际实现:

final Throwable[] error = new Throwable[1];

IHookCallBack callback = new IHookCallBack() {
@Override
public void runTestMethod(ITestResult tr) {
try {
invokeMethod(thisMethod, testInstance, parameters);
} catch (Throwable t) {
error[0] = t;
tr.setThrowable(t); // make Throwable available to IHookable
}
}

@Override
public Object[] getParameters() {
return parameters;
}
};
hookable.run(callback, testResult);
if (error[0] != null) {
throw error[0];
}

不幸的是,最后一行意味着我的测试用例无论如何都会抛出异常,因为 error 数组在 run 方法中完全不在我的掌控之中。

那么,拦截异常并按照我想要的方式处理它的正确方法是什么?

最佳答案

你想做的事情真的很有趣。您应该尝试在 https://github.com/cbeust/testng/pull/ 上提出更改建议

但也许 IHookable 不是您可以使用的最佳监听器。你试过吗IInvokedMethodListener

void afterInvocation(IInvokedMethod method, ITestResult result) {
if (result.getThrowable().getCause() instanceof IllegalArgumentException) {
System.out.println("This is expected.");
result.setThrowable(null);
result.setStatus(SUCCESS); // If you want to change the status
} else {
System.out.println("Unexpected exception");
}
}

关于java - testng - 创建 KnownFault 和 IntermittentFailure 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38784823/

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