Лучшая практика для отладки утверждений во время модульного тестирования - PullRequest
42 голосов
/ 04 января 2009

Не мешает ли интенсивное использование юнит-тестов утверждениям отладки? Кажется, что запуск отладочного утверждения в тестируемом коде подразумевает, что модульный тест не должен существовать или отладочное утверждение не должно существовать. «Может быть только один» кажется разумным принципом. Это обычная практика? Или вы отключаете свои отладочные утверждения при модульном тестировании, чтобы их можно было использовать для интеграционного тестирования?

Edit: я обновил 'Assert' для отладки assert, чтобы отличить assert в тестируемом коде от строк в модульном тесте, которые проверяют состояние после запуска теста.

Также вот пример, который, я считаю, показывает дилемму: Модульный тест передает недопустимые входные данные для защищенной функции, которая утверждает, что ее входные данные действительны. Если модульного теста не существует? Это не публичная функция. Возможно, проверка входных данных убьет перф? Или должен утверждать, что не существует? Функция защищена не является частной, поэтому она должна проверять свои входные данные на безопасность.

Ответы [ 11 ]

0 голосов
/ 08 апреля 2010

Как уже упоминалось, операторы Debug.Assert всегда должны быть true , даже если аргументы неверны, утверждение должно быть истинным, чтобы приложение не переходило в недопустимое состояние и т. Д.

Debug.Assert(_counter == somethingElse, "Erk! Out of wack!");

Вы не должны быть в состоянии проверить это (и, вероятно, не хотите, потому что на самом деле вы ничего не можете сделать!)

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

if (param1 == null)
  throw new ArgumentNullException("param1", "message to user")

Такое «утверждение» в вашем коде все еще очень проверяемо.

ПК: -)

...