#.net #debugging #testdriven.net
Вопрос:
Я пытаюсь использовать TestDriven.Сеть не только для тестирования моего кода, но и для вызова функции в моем коде, целью которой является вывод внутреннего состояния кода в окно отладки.
Вот очень упрощенный пример того, что я пытаюсь сделать..
<TestFixture()> _
Public Class UnitTest
<Test()> _
Public Sub TestDebug()
Dim oClass1 As New Class1
Assert.AreEqual(True, oClass1.IsTrue)
Debug.WriteLine("About to call .PrintDebug()")
oClass1.PrintToDebug()
End Sub
End Class
Public Class Class1
Private _IsTrue As Boolean = True
Public ReadOnly Property IsTrue() As Boolean
Get
Return _IsTrue
End Get
End Property
Public Sub PrintToDebug()
Debug.WriteLine("Internal state of Class1: " amp; _IsTrue)
End Sub
End Class
Я пытаюсь протестировать общедоступный интерфейс Class1 и каким-то образом просмотреть выходные данные Class1.PrintToDebug()
функции.
Я просмотрел тестовый привод.Net quickstart, в котором показаны примеры использования Debug.WriteLine
в модульном тесте, но, как ни странно, это тоже не работает для меня — т. Е. Единственный вывод в моем окне «Тест»:
------ Test started: Assembly: ClassLibrary1.dll ------
1 passed, 0 failed, 0 skipped, took 1.19 seconds.
Я попытался заглянуть в другие окна (Отладка и сборка), в окне отладки включены параметры «Вывод программы» и «Сообщения об исключениях».
Я искал варианты или предпочтения и не могу их найти!
Спасибо за вашу помощь!
Изменить: Я использую VB.Net 2.0, тестовый привод.Net 2.14.2190 и NUnit 2.4.8.0
Ответ №1:
Я обнаружил это во время отладки.Writeline() не работает с модульными тестами, Консоль.WriteLine() делает это.
Причина в том, что при запуске тестов процесс отладчика не вызывается, а отлаживается.Функция WriteLine() игнорируется. Однако, если вы используете «Тест с отладчиком», я думаю (не пробовал) отладку.WriteLine() будет работать.
Комментарии:
1. Спасибо за предложение, но я также не получаю никаких результатов, используя опцию «Тест с отладчиком». Странно, что в их документации указано » Отладка. WriteLine» и «Запуск тестов» при нажатии! testdriven.net/quickstart.aspx#Run Test(ы)
2. Просто попробовал консоль. WriteLine (), и он отображается в окне теста. Я попробую сейчас, еще раз спасибо :о)
3. Я приму ваш ответ как изменение отладки. Заявления WriteLine() сделали свое дело. Приставка. WriteLine работал, хотя я решил использовать Trace. Вместо этого напишите :o)
Ответ №2:
Trace.WriteLine()
похоже, это ответ :o)
Вот выходные данные для примера из моего вопроса, используя Trace
вместо Debug
:
------ Test started: Assembly: ClassLibrary1.dll ------
Internal state of Class1: True
1 passed, 0 failed, 0 skipped, took 0.61 seconds.
Однако я обнаружил одну вещь.. выполнение приостанавливается при первом неудачном утверждении модульного теста, что означает, что Trace
инструкции не выполняются, если Assert()
вышеперечисленные инструкции не выполняются.
Комментарии:
1. Да, именно поэтому рекомендуется иметь одно утверждение для каждого теста.
Ответ №3:
Попробуйте использовать трассировку.Вместо этого напишите (…). Вызов для отладки.Строка записи(…) будет выполнена только после определения ОТЛАДКИ. По умолчанию новые проекты Visual Studio больше не определяют ОТЛАДКУ, но они определяют ТРАССИРОВКУ.
Я действительно должен изменить пример быстрого запуска, чтобы вместо него использовать трассировку.
С уважением, Джейми.
Комментарии:
1. -1 также не работает с трассировкой (но настраивается с помощью опций)
2. и он распечатывается сразу после завершения теста!
Ответ №4:
Возможно, вам захочется узнать, что 2.16 (текущая бета-версия) включает в себя:
1587: Всегда отображать вывод консоли/сообщения об ошибках и выполняемых тестах
Сообщения, сгенерированные запускающим тестом, и вывод консоли теперь будут отображаться при выполнении всех тестов в проекте/решении.
1588: Необязательно отображать результаты трассировки/отладки при выполнении всех тестов в проекте/решении.
По умолчанию вывод трассировки/отладки не отображается при выполнении всех тестов в проекте/решении. Это поведение может быть изменено с помощью TesDriven.Панель параметров сети.
Так что, похоже, это будет работать в следующей версии.
Ответ №5:
IIRC, эти выходные данные отображаются только в окне вывода при выполнении отдельного теста. Попробуйте щелкнуть правой кнопкой мыши в методе тестирования, чтобы запустить только этот тест…?
Комментарии:
1. Вот как я это делаю, но по-прежнему никаких результатов отладки. WriteLine() — я переключился на трассировку. Пишите, и это работает :o/
Ответ №6:
«Запуск тестов…» включает в себя любые настройки, которые у вас в настоящее время есть для создания вашего решения/проекта.
Вы должны убедиться, что текущие параметры сборки для вашего решения/проекта имеют значение «Отладка», а не «Выпуск» (в противном случае Отладка.Вызовы Write*() условно удаляются компилятором).
Ответ №7:
CTRL ALT I показывает вам ближайшее окно