Ответ 1
Лично я не заинтересован в встраивании трассировки в модульные тесты (с использованием любого из указанных вами способов). Если для этого требуется unit test, это скорее всего признак того, что ваш unit test слишком сложный. Если вам нужно отслеживать логику с помощью unit test, вы должны использовать утверждения в течение всего теста, чтобы программно проверить, что ожидаемое поведение происходит, устраняя необходимость вывода текстового трассировки.
Однако вам нужно быть прагматичным - полезно иногда это делать. Использование любого метода (или что-то еще похожее на Debug.WriteLine
) прекрасно, но тот, который вы используете, дает вам некоторую гибкость.
Если у вас есть много тестов, которые выводят трассировку, вы можете получить много результатов трассировки при выполнении всех ваших тестов за один проход. В NUnit вы можете отфильтровать это на странице параметров:
В четырех вариантах выполните следующие действия: ref:
- Стандартный вывод. Захват всего вывода, записанного на Console.Error.
- Выход ошибки. Захват всего вывода, записанного на Console.Error.
- Выход трассировки. Захват всего вывода, записанного в Trace или Debug.
- Выход журнала. Захват вывода, записанного в журнал log4net. NUnit фиксирует все выходные данные на уровне ошибки или выше, если для параметра
DefaultLogThreshold
в конфигурационном файле тестовой сборки или проекта не указан другой уровень.
Отключив эти параметры, вы можете индивидуально отключить вывод трассировки, отправленный по четырем различным методам ведения журнала, что позволит вам фильтровать трассировку теста.
Мне не известно ни одной подобной настройки в тестовом бегуре ReSharper.
Стоит только подумать, что вывод текста может иметь побочные эффекты. Недавно я столкнулся с сбоем NUnit, потому что в каком-то выпуске содержались символы, которые были незаконными в файле XML - NUnit производит один из них как часть нашего автообмена.
ИЗМЕНИТЬ
@Bronumski: Единственное реальное различие, которое я вижу в использовании одного метода над другим, - это то, как потребляется выход.
Некоторые инструменты собирают трассировку Debug
(например, DebugView), но не вывод Console
. Кроме того, вы можете отключить вывод Trace
во время выполнения через конфигурацию (в app.config), но не Console
. Это будет иметь значение только в том случае, если вам нужно украсить реальный (т.е. Не тестовый) код с трассировкой для ваших тестов. Журналирование большого количества текста во время выполнения может быть дорогостоящим и поэтому полезно, если его можно отключить, если вам действительно не нужно его диагностировать что-то.
Кроме того, при использовании NUnit вы можете выборочно отключать их независимо друг от друга, если вы слишком много регистрируетесь, чтобы пройти через.