Подтвердить что ты не робот

Использование Console.Out.WriteLine vs Trace.WriteLine в nUnit либо выполняется изолированно, либо в reSharper или TeamCity

Я смутно помню, как читал "что-то" "где-то" об использовании Trace.WriteLine над Console.Out.WriteLine в nUnit, возможно, в контексте reSharper или TeamCity, но я не могу запомнить детали.

Поэтому вопрос заключается либо в контексте nUnit, выполняемого отдельно, либо внутри reSharper/TeamCity, есть ли какая-либо польза от использования одного над другим, каковы различия, если таковые имеются, и что вы лично используете?

В настоящее время моя точка зрения - Trace.WriteLine не только потому, что я смутно помню то, что я мог бы придумать, но я чувствую, что трассировка в unit test является скорее задачей диагностики, чем задачей вывода.

4b9b3361

Ответ 1

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

Однако вам нужно быть прагматичным - полезно иногда это делать. Использование любого метода (или что-то еще похожее на Debug.WriteLine) прекрасно, но тот, который вы используете, дает вам некоторую гибкость.

Если у вас есть много тестов, которые выводят трассировку, вы можете получить много результатов трассировки при выполнении всех ваших тестов за один проход. В NUnit вы можете отфильтровать это на странице параметров:

NUnit Text Options

В четырех вариантах выполните следующие действия: ref:

  • Стандартный вывод. Захват всего вывода, записанного на Console.Error.
  • Выход ошибки. Захват всего вывода, записанного на Console.Error.
  • Выход трассировки. Захват всего вывода, записанного в Trace или Debug.
  • Выход журнала. Захват вывода, записанного в журнал log4net. NUnit фиксирует все выходные данные на уровне ошибки или выше, если для параметра DefaultLogThreshold в конфигурационном файле тестовой сборки или проекта не указан другой уровень.

Отключив эти параметры, вы можете индивидуально отключить вывод трассировки, отправленный по четырем различным методам ведения журнала, что позволит вам фильтровать трассировку теста.

Мне не известно ни одной подобной настройки в тестовом бегуре ReSharper.

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


ИЗМЕНИТЬ

@Bronumski: Единственное реальное различие, которое я вижу в использовании одного метода над другим, - это то, как потребляется выход.

Некоторые инструменты собирают трассировку Debug (например, DebugView), но не вывод Console. Кроме того, вы можете отключить вывод Trace во время выполнения через конфигурацию (в app.config), но не Console. Это будет иметь значение только в том случае, если вам нужно украсить реальный (т.е. Не тестовый) код с трассировкой для ваших тестов. Журналирование большого количества текста во время выполнения может быть дорогостоящим и поэтому полезно, если его можно отключить, если вам действительно не нужно его диагностировать что-то.

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

Ответ 2

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

Ответ 3

Debug Class предоставляет набор методов и свойств, которые помогают отлаживать ваш код. Если вы используете методы класса Debug для печати информации отладки и проверяете свою логику с помощью утверждений, вы можете сделать свой код более надежным, не влияя на производительность и размер кода вашего продукта доставки. В проектах Visual Studio 2005 создание отладочной сборки позволяет Debug.

Вы можете использовать свойства и методы в классе Trace для сборки релиза инструмента. Инструментарий позволяет контролировать работоспособность приложения в реальных условиях. Трассировка помогает вам изолировать проблемы и исправить их, не нарушая работу системы. В проектах Visual Studio 2005 трассировка включена по умолчанию для сборок для выпуска и отладки, поэтому код генерируется для всех методов трассировки как в сборках релизов, так и для отладки. Поэтому вы можете использовать Trace для сборки релиза инструмента.

Я нашел здесь этот отрывок, если он помогает:

http://www.interviewcorner.com/Answer/Answers.aspx?QuestionId=268&MajorCategoryId=1&MinorCategoryId=16

РЕДАКТИРОВАТЬ: Находит ли более интересная информация упоминает трассировку с использованием многоадресной рассылки, означает ли это, что все, что ее реализует, будет захватывать строку записи трассировки?

Прочтите и дайте отзывы, пожалуйста:

http://www.drdobbs.com/184405769;jsessionid=SFAYCN2R2Y3L5QE1GHRSKH4ATMY32JVN