Я бы извлек код для опроса данных в отдельный класс, который можно смоделировать, а также извлек бы код, который отправляет эти данные по той же причине. Возможно, вы захотите извлечь код отображения данных, в зависимости от того, насколько он тривиален.
Я бы определенно использовал фиктивные таймеры в модульных тестах, в противном случае ваши тесты сложно настраивать и запускать медленно. Вы можете либо передать таймер в конструкторе, либо предоставить свойство, которое вы можете установить. Я часто создаю обычный таймер в конструкторе, а затем перезаписываю его из моего модульного теста.
Вы также можете извлечь логику повторных попыток, чтобы ее можно было проверить отдельно от другого кода. Передача делегата кода для повторной попытки может быть способом отсоединения кода данных от логики повторения. Вы также можете использовать IEnumerable
и оператор yield
, чтобы сгенерировать ваши данные и передать их в код повтора. По сути, я ищу способы сделать так, чтобы код повторной попытки напрямую не вызывал целевой код, который он должен попытаться повторить. Это облегчает тестирование и генерирование всех возможных ошибок, хотя вы можете получить некоторые из тех же преимуществ, просто смоделировав этот целевой код.
Если у вас действительно есть многопоточные сценарии, которые вам нужно протестировать, есть некоторые инструменты для координации потоков из теста. Одним из них является порт, который я создал из Java MultithreadedTC , который называется TickingTest .