Как добавить сон в мой метод Retry TestNG? - PullRequest
0 голосов
/ 24 января 2019

В настоящее время я реализую метод IRetryAnalyzer в сочетании с IAnnotationTransformer, чтобы выполнить повторную попытку, если мои тесты не пройдены.Я хочу добавить 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;
}

Однако, «Исключение»msgstr "выдает ошибку:" Переопределенный метод не генерирует исключение java.lang.Exception ".Кажется, я не могу добавить Sleep к этой повторной попытке, несмотря на то, как много я пробовал.Кто-нибудь знает работу вокруг?

Ответы [ 3 ]

0 голосов
/ 24 января 2019

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;
}
0 голосов
/ 24 января 2019

Существует разница между объявлением throws и блоком try-catch.Разница в том, что try-catch поглощает исключение, а throws позволяет ему распространяться.См. Ссылку ниже:

попытка / отлов против бросков Исключение

Поскольку повтор является переопределенным методом, существуют некоторые правила, касающиеся переопределения метода с обработкой исключения.

Правила:

1.Если метод суперкласса не объявляет исключение, переопределенный метод подкласса не может объявить проверенное исключение, но он может объявить непроверенное исключение.

2.Если метод суперкласса объявляет исключение, переопределенный метод подкласса может объявлять то же самое, исключение подкласса или нет исключения, но не может объявлять родительское исключение.

Итак, объявите исключение в соответствии с приведенными выше правилами или окружите Thread.sleep (5000) 'с блоком try-catch, как показано ниже.

try {
        Thread.sleep(5000);
    } catch (Exception e) {
        //do nothing
    }

Примечание:

Thread.sleep () фактически учитывает значениекак миллисекунды, поэтому используйте 5000 вместо 5.

0 голосов
/ 24 января 2019

Поймать и подавить InterruptedException, которое будет выдано.

try {
    Thread.sleep(5);
} catch (InterruptedException e) {
    //do nothing
}

Это избавит вас от необходимости добавлять предложение throws в определение метода.

...