Использование Console.Out.WriteLine против Trace.WriteLine в nUnit либо работает изолированно, либо внутри reSharper или TeamCity - PullRequest
12 голосов
/ 06 октября 2010

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

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

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

Ответы [ 3 ]

10 голосов
/ 16 октября 2010

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

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

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

NUnit Text Options

Четыре опции делают следующее ref :

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

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

Мне не известно о каких-либо аналогичных настройках в тестовом средстве ReSharper.

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


EDIT :

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

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

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

1 голос
/ 06 октября 2010

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

0 голосов
/ 12 октября 2010

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

Вы можете использовать свойства и методы в классе 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

...