2017-01-22 2 views
0

У меня есть тест NUnit, который иногда генерирует исключение в начале, поэтому я хочу обернуть его в таймаут с задержкой и интервалом, используя ограничение .After.NUnit Throws.Nothing.After (,) тест сбой первый раз

Это не точный код, но это пример того, что я говорю и пытаюсь достичь.

[Test] 
public void ThrowsNothingAfterTest() 
{ 
    var i = 0; 
    Assert.That(() => 
    { 
     if (i == 1) 
     { 
      return true; 
     } 

     i++; 
     throw new NotImplementedException(); 
    }, Throws.Nothing.After(1000, 100)); 
} 

Я бы предположить, что вышеописанное испытание потерпит неудачу в первый раз, то скоротать время, после того, как, но это работает только один раз и не удается.

+1

Что именно вы пытаетесь достичь здесь? Ваш тест не имеет большого смысла. –

+0

У меня есть служба, которая вращается внутри '[SetUpFixture]', и для начала требуется некоторое время. Поэтому я хочу вызовите веб-сервис, который служба разоблачает, а затем проверит его значение. –

ответ

2

After может быть функционально несовместим с Throws.Nothing. Мы должны проверить это и, возможно, выяснить способ сделать его синтаксически невозможным.

Что вы говорите с помощью синтаксиса, который вы используете: продолжайте пробовать этот вызов каждые 100 мс, пока он не будет выброшен, максимум до 1000 мс (10 раз). Это безопасно для вашего примера, но это было бы нежелательно во многих случаях. Вот почему я склонялся к тому, чтобы сделать его не компилируемым, а не заставить его работать. :-(

Если вы можете написать код, чтобы вернуться верно, когда ваша служба инициализируется, то вы можете просто использовать

Assert.That(() => IsServiceUpAndRunning(), 
      After(1).Seconds.PollEvery(10).Milliseconds); 

Если исключение, просто поймать его в методе и возвращают ложь.

+0

Было бы неплохо, если бы оно просто работало как 'Is', но это довольно приемлемо обходной путь. благодаря –

Смежные вопросы