Я столкнулся с unit test, который прерывается с перерывами, потому что прошедшее время не то, что я ожидаю.
Пример того, как выглядит этот тест:
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
TimeSpan oneSecond = new TimeSpan(0, 0, 1);
for(int i=0; i<3; i++)
{
Thread.Sleep(oneSecond);
}
stopwatch.Stop();
Assert.GreaterOrEqual(stopwatch.ElapsedMilliseconds, 2999);
В большинстве случаев это проходит, но по какой-то причине он потерпел неудачу, потому что:
Ожидается: больше или равно 2999 Но было: 2998Я не понимаю, как это может быть меньше 3 секунд. Есть ли проблема с проблемой Thread.Sleep или секундомера, о которой я не знаю?
Также как обновление некоторых из приведенных ниже вопросов. Сценарий, который тестируется модулем, является классом, который позволяет вызвать метод для выполнения какого-либо действия, и если он терпит неудачу, подождите второй и вспомните этот метод. Тест, показанный выше, является просто приближением к тому, что происходит.
Предположим, что я хотел вызвать метод DoSomething()... но в случае исключения из DoSomething(), я хочу, чтобы повторить попытку, вызвав его максимум до 3 раз, но подождите 1 секунду между каждая попытка. Цель unit test в этом случае состоит в том, чтобы проверить, что, когда мы запросили 3 повтора с 1 секундой ожидания между каждой попыткой, общее время, затраченное на большее, чем 3 секунды.