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