我当前正在与IAnnotationTransformer结合使用IRetryAnalyzer方法,以在测试失败时执行重试。我想在重试发生时添加Thread.sleep()。这是我目前拥有的:
public boolean retry(ITestResult result){
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
当我添加Thread.sleep()时,它要求我为Retry方法添加一个抛出的异常:
public boolean retry(ITestResult result) throws Exception{
if (retryCount < maxRetryCount) {
retryCount++;
Thread.sleep(5);
return true;
}
return false;
}
但是,“ Exception”给我一个错误:“ Overriden方法不会抛出java.lang.Exception”。尽管我尝试了多少次,但似乎无法将睡眠添加到此重试中。有人知道可以解决吗?
答案 0 :(得分:1)
捕获并抑制将抛出的InterruptedException
。
try {
Thread.sleep(5);
} catch (InterruptedException e) {
//do nothing
}
这将避免您需要在方法定义中添加throws
子句。
答案 1 :(得分:0)
Thread.sleep(long)
可能抛出InterrupedException
。
您可以将其包含在try catch
块中,也可以从方法中删除throws Exception
。
public boolean retry(ITestResult result){
if (retryCount < maxRetryCount) {
retryCount++;
try{
Thread.sleep(5);
}catch(Exception e){}
return true;
}
return false;
}
答案 2 :(得分:0)
“ throws”声明和“ try-catch”块之间有区别。不同之处在于,“ try-catch”吞噬了异常,而“ throws”则将其传播。请参考以下链接:
try/catch versus throws Exception
由于重试是一种覆盖的方法,因此有一些有关使用异常处理覆盖方法的规则。
规则为:
1。如果超类方法未声明异常,则子类重写方法无法声明已检查异常,但可以声明未检查异常。
2。如果超类方法声明了异常,则子类重写方法可以声明相同的子类异常,也可以声明无异常,但不能声明父异常。
因此,请根据上述规则声明异常,或将“ Thread.sleep(5000)”包含在如下所示的try-catch块中。
try {
Thread.sleep(5000);
} catch (Exception e) {
//do nothing
}
注意:
Thread.sleep()实际上将值视为毫秒,因此使用5000而不是5。