作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 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/
我想用 KnownFault 注释我的一些测试用例 - 这几乎可以完成预期异常的功能,并使用 YouTrack 的 REST API 进行一些魔法。我还希望有一个 IntermittentFailur
我是一名优秀的程序员,十分优秀!