Таймеры насмешек при модульном тестировании коммуникационной библиотеки с таймаутами - PullRequest
0 голосов
/ 11 ноября 2018

Я должен поддерживать довольно большую библиотеку, реализующую протокол связи с разными уровнями. К счастью, существуют тысячи модульных тестов для разных ситуаций.

У меня проблемы с этими модульными тестами, проверяющими время ожидания в библиотеке. Тайм-ауты находятся в диапазоне нескольких секунд, что недопустимо для юнит-тестирования.

Что мы уже сделали, так это внедрили единую центральную службу синхронизации, которая может быть настроена на более быструю работу с определенным фактором. К этому тесты завершаются намного быстрее. Но мы не можем выбрать этот фактор слишком большим, так как тогда некоторые тесты начинают случайно проваливаться, потому что производительность тестируемого компьютера меняется. Кроме того, это кошмар для отладки.

Мне кажется, что для проверки таймаутов неправильно использовать какие-либо независимо работающие часы. Было бы лучше, если бы это полностью контролировалось модульным тестом.

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

Код библиотеки с тайм-аутом более или менее структурирован как:

var startTime = TimeService.CurrentTime;
while (TimeService.CurrentTime < startTime + timeout)
{
    // do something
    Thread.Sleep(50); // or so
}

и было бы трудно изменить эту структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...