модульное тестирование для CTRL-C отправлено в приложение - PullRequest
9 голосов
/ 21 декабря 2010

Я разрабатываю приложение, обрабатывающее CTRL-C. Я создаю обработчик сигнала для корректного завершения потоков и других ресурсов.

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

Я работаю в Linux и хочу автоматически запускать свои тесты с помощью CPPUNIT. В каждом из моих тестов CTRL-C я запускаю процесс, а затем отправляю CTRL-C, используя функцию kill с PID процесса.

Я использую общую память; как только протестированное приложение достигает состояния, представляющего интерес для меня, или момента, когда я хочу отправить CTRL-C, я записываю тег или состояние в общую память. В то же время код набора тестов, запущенный в другом процессе, непрерывно опрашивает общую память и, как только он читает желаемое состояние, отправляет CTRL-C / kill.

Как вы думаете, это хороший подход или обычно это делается лучше / эффективнее?

С уважением

AFG

Ответы [ 2 ]

6 голосов
/ 21 декабря 2010

Первое тестирование поведения при получении какого-либо внешнего сигнала выглядит не как модульное тестирование, а как функциональное тестирование.

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

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

2 голосов
/ 21 декабря 2010

Введите уровень косвенности.

  1. Поместите высокоуровневый программный код за фасадом (я использую класс с именем Program).
  2. Пусть этот фасад предоставитshutdown() метод, который выполняет все операции выключения, кроме вызова std::exit().
  3. Модульное тестирование этого метода shutdown(), как и любой другой метод.
  4. Делегат обработчика сигналов должен делегироватьэтот shutdown() метод для static Program объекта, который представляет всю вашу программу, тогда call std::exit().Это единственная часть, которую вы не можете тестировать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...