Сведения о вопросе

Mathprofi

09:37, 26th August, 2020

Теги

c#   .net   unit-testing   timer    

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

Просмотров: 474   Ответов: 4

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

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

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



  Сведения об ответе

VERSUION

19:02, 26th August, 2020

  Сведения об ответе

ITSME

20:48, 26th August, 2020

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


  Сведения об ответе

DINO

22:30, 13th August, 2020

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

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


  Сведения об ответе

lourence

09:08, 20th August, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться