Модульное тестирование приложения на основе таймера?

StackOverflow https://stackoverflow.com/questions/12045

  •  08-06-2019
  •  | 
  •  

Вопрос

В настоящее время я пишу простое мини-приложение на основе таймера на C#, которое выполняет действие n раз каждые k секунд.
Я пытаюсь принять стиль разработки, основанный на тестировании, поэтому моя цель — провести модульное тестирование всех частей приложения.

Итак, мой вопрос:Есть ли хороший способ модульного тестирования класса, основанного на таймере?

Проблема, на мой взгляд, в том, что существует большой риск того, что выполнение тестов будет занимать некомфортно много времени, поскольку им приходится ждать столько-то времени, чтобы произошли желаемые действия.
Особенно, если вам нужны реалистичные данные (секунды) вместо использования минимального временного разрешения, разрешенного структурой (1 мс?).
Я использую макет объекта для действия, чтобы зарегистрировать количество вызовов действия и чтобы действие практически не занимало времени.

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top