2017-01-18 9 views
0

Я использую повторную попытку, чтобы выполнять мои тесты несколько раз, когда он терпит неудачу. Но, я заметил, что при сбое исключения (Тайм-аут при ожидании elemnt например.), Тогда тест будет запускаться только один, а не как сконфигурированный.Nunit_Retry работает только с ошибкой таймаута

Это то, что я пытаюсь:

[Test] 
 
[NUnit_retry.Retry(times: 3, requiredPassCount: 1)] 
 
     public void MyTest() 
 
    { 
 
     some code... 
 
    } 
 
     
 

ответ

0

NUnit-х [Retry] атрибут только число повторных попыток, когда тест не пройден, а не ошибок. Это означает, что AssertionExceptions вызовет повторную попытку, однако другие исключения не будут.

Вы не говорите, как вы делаете свои таймауты - вы используете для этого атрибут NUnit [Timeout]? Это должно вызвать повтор. Если вы тайм-аут вызывает другой вид исключения, вам, возможно, придется ожидать этого, и вместо этого «утверждать, что этого не происходит». Вы можете сделать это, утверждая, что соответствующая строка не вызывает никакого исключения, например.

string toFetch; 
Assert.That(() => { toFetch = FetchMyString(); }, Throws.Nothing); 

Если вы хотите, чтобы вместо того, чтобы сделать что-то во всем мире, вы можете вместо этого хотите реализовать пользовательский атрибут, который RETRIES на ResultState.Error, а также ResultState.Failure. Посмотрите, как реализован текущий RetryAttribute, который может дать вам представление о том, с чего начать.

Retry Attribute Docs

+0

10x @ Крис У меня есть некоторые другие формы тайм-аута, который (возможно) вместо того, чтобы бросать исключение. как бы я обернул его с помощью предложенного утверждения? мне нужно сделать это в каждом случае, я думаю, что тайм-аут появится? любое общее решение? –

+0

@YanivEliav - Я обновил свой ответ с дополнительной информацией и некоторыми исправлениями. знак равно – Chris