Как запустить NUnit в режиме отладки из Visual Studio?

120

Недавно я создал тестовую среду для части C #, над которой я работал. У меня есть настроенный NUnit и новый проект в моем рабочем пространстве для тестирования компонента. Все работает хорошо, если я загружаю свои модульные тесты из Nunit (v2.4), но я дошел до точки, когда было бы действительно полезно запустить в режиме отладки и установить несколько точек останова.

Я пробовал предложения из нескольких руководств, которые предлагают изменить свойства «Отладка» тестового проекта:

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll

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

Cannot start test project 'TestDSP' because the project does not contain any tests.

Это потому, что я обычно загружаю \ DSP.nunit в графический интерфейс Nunit и там проводятся тесты?

Я начинаю думать, что проблема может заключаться в том, что VS хочет запустить собственную тестовую среду, и поэтому не может найти тесты NUnit?

Изменить : для тех, кто интересуется тестовыми приборами, один из моих файлов .cs в проекте TestDSP выглядит примерно так:

namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

... Я новичок в C # и тестовой среде NUnit, поэтому вполне возможно, что я пропустил важную информацию ;-)

Окончательное решение : большой проблемой был проект, который я использовал. Если вы выберете Other Languages -> Visual C# -> Test -> Test Project... при выборе типа проекта, Visual Studio попытается использовать свою собственную среду тестирования, насколько я могу судить. Вместо этого вы должны выбрать обычный проект библиотеки классов C #, и тогда инструкции в моем выбранном ответе будут работать.

Джон Кейдж
источник
Мне ваш тестовый класс приспособлений выглядит нормально, так что это должно быть что-то в проекте, как вы предложили.
Патрик Макдональд
2
Похож на этот вопрос: stackoverflow.com/questions/247900/… Ответ тот же ...
Патрик Дежарден,

Ответы:

46

Я использую тот же метод, что и вы, Джон, без флага / assembly, т.е.

Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe

Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"

Содержит ли TestDSP.dll все ваши TestFixtures?

Поскольку мой тестовый проект не является запускаемым проектом в решении, я запускаю свои тесты, щелкнув правой кнопкой мыши тестовый проект и выбрав «Отладка» -> «Начать новый экземпляр».

Патрик Макдональд
источник
1
Я пробовал то, что вы предлагали (удаление / assembly), но это не имеет значения. Когда я запускаю новый экземпляр, он выдает ошибку. Я думаю, что это в основном связано с тем фактом, что когда я создавал проект TestDSP, я создавал его из встроенного шаблона тестового проекта VisualStudio, поэтому он ищет неправильную среду тестирования.
Джон Кейдж,
3
Наконец-то он заработал. Я был прав настолько, насколько это мешали варианты проекта - повторное создание тестового проекта с использованием стандартного шаблона класса устранило проблему.
Джон Кейдж,
1
Это поможет, если вы также добавите /runв свои * аргументы командной строки, которые автоматически начнут выполнять тесты ... Я также суммировал все это (используя изображения) в своем сообщении в блоге .
Роберт Коритник
6
Если люди не читают (очень полезный) пост в блоге Роберта ( erraticdev.blogspot.com/2012/01/… ): для .NET 4.0 и более поздних версий , я считаю, вам также нужно добавить это в nunit.exe.config : <startup> <supportedRuntime version = "4.0" /> </startup>.
devuxer
3
Дальнейшие действия: в более поздних версиях NUnit (последняя версия на сегодняшний день - v2.6.1) вам нужно закомментировать <supportedRuntime version="v2.0.50727" />в nunit.exe.config.
devuxer
102

Когда мне нужно отладить свои тесты NUnit, я просто подключаюсь к приложению nunit-agent.exeс графическим интерфейсом NUnit, используя «Отладка | Присоединить к процессу», и запускаю тесты из графического интерфейса. Все точки останова в моих тестах (или коде, который они тестируют) срабатывают. Я неправильно понимаю ваш вопрос, или это сработает для вас?

Мэтт Гамильтон
источник
7
Для вашей (и других) информации: Debug | Attach недоступен в экспресс-выпусках VS.
Ричард
15
Имейте в виду, что вам нужно выбрать «Включить поддержку Visual Studio» в диалоговом окне «Настройки» в NUnit -> Поддержка IDE
Хулио Гарсия,
8
Для .NET 4.0 и более поздних, я полагаю , вы также должны добавить это nunit.exe.config: <startup> <supportedRuntime version="4.0" /> </startup>.
devuxer
1
Это быстрый ярлык для подключения к правильному процессу (запускается в консоли диспетчера пакетов): ($ dte.Debugger.LocalProcesses |? {$ _. Name.EndsWith ("nunit-agent.exe")}). Attach ()
Барт
7
К вашему сведению: вам нужно прикрепить отладку к процессу под названием «nunit-agent.exe», а НЕ «nunit.exe». В противном случае ваши точки останова игнорируются, и вы задаетесь вопросом, почему ...
Дженни О'Рейли
21

Просто удалите линию, которая выглядит как

<ProjectTypeGuids>
    {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>

из файла вашего проекта. Эта строка в основном сообщает VS.Net, что это тестовый проект, поэтому «Невозможно запустить тестовый проект». К вашему сведению, 1-й гид говорит: «Это тест», 2-й говорит: «Это C #». Для получения информации об этих руководствах: http://www.mztools.com/Articles/2008/MZ2008017.aspx

user276648
источник
18

В дополнение к ответу, предоставленному @Justin, вот еще несколько деталей для NUnit 2.6.

Используя NUnit 2.6, подключайтесь к nunit.exe или nunit-console.exe, а НЕ к агенту. Конфигурация, отмеченная @Justin, немного отличается. Ниже приведен пример из nunit.exe.config (то же самое для nunit-console.exe.config).

<startup useLegacyV2RuntimeActivationPolicy="true">
  <!-- Comment out the next line to force use of .NET 4.0 -->
  <supportedRuntime version="v2.0.50727" />  
  <supportedRuntime version="v4.0.30319" />
</startup>

Для тестового проекта .NET 4, чтобы получить точки останова, вам придется закомментировать или удалить строку v2.0, как предполагает комментарий. Как только я это сделал, я смог отладить тестовый проект .NET 4.0.

dblood
источник
У меня был успех только с v2.0.50727строкой при отладке сборок .NET 2 из VS2005 с помощью nunit. ( v4Линия помешала прикреплению отладчика VS 2005.)
Мартин Ба,
17

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

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

какой Debugger.Launch() нажатии кнопки «Выполнить в NUnit» появляется следующий диалог.

Диалог JIT-отладчика

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

Скотт Чемберлен
источник
12

В Nunit 3.0.1 (я использую VS2013) откройте главное меню> Тест> Windows> Обозреватель тестов. Затем в «Обозревателе тестов» щелкните тестовый пример правой кнопкой мыши, вы можете увидеть: введите описание изображения здесь

Надеюсь это поможет.

Quinn
источник
2
Спасибо за этот ответ. Намного проще, чем все остальные.
дано
Я использую NUnit 2.5.9 в VS 2015, и он работал с расширением VS под названием «Тестовый адаптер NUnit 2». Вы можете выполнить тест в окне обозревателя тестов.
mggSoft 06
6

Установите TestDriven.NET , плагин для Visual Studio.

Оттуда вы можете щелкнуть правой кнопкой мыши свою сборку модульного теста и выбрать «Выполнить тесты», чтобы запустить весь набор, щелкните правой кнопкой мыши класс TestFixture, чтобы запустить только тесты в этом классе, или щелкните правой кнопкой мыши метод Test, чтобы запустить только этот метод.

У вас также есть возможность протестировать с помощью отладчика, если вам нужно установить точку останова в ваших тестах в режиме отладки.

Джон Лимджап
источник
2
170 долларов - это невероятно высокая цена для такого инструмента. Кто-нибудь завышает цены?
Бен Харди
Да. За такие деньги я бы предпочел инвестировать в JetBrains Resharper, который затем бесплатно предоставляет Test Runner с интеграцией отладки и кучей других функций повышения производительности.
Роман
В Visual Studio 2012 вы можете бесплатно получить средство запуска тестов NUnit с Nuget.
Джон Лимджап,
6

Попробуйте NUnitit - надстройку Visual Studio с открытым исходным кодом для отладки тестовых случаев NUnit

Домашняя страница - http://nunitit.codeplex.com/

abhilash
источник
Это довольно хорошо, хотя я не могу найти способ сказать ему, чтобы он просто запускал один тест (?)
Джон Кейдж
5

Удалите ProjectTypeGuids из файла проекта.

Стив
источник
+1 см. И этот пост
Феличе Поллано
3

Теперь с картинками:

  1. Запустите NUnit gui ( загрузите 2.6.2 отсюда ), затем перейдите вFile -> Open Project

введите описание изображения здесь

  1. Выберите свой тест .dllиз папки bin ( C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll)

  2. Перейдите в Visual Studio Debug -> Attach to process(откроется окно Прикрепить к процессу)

  3. Прокрутите список вниз и выберите, nunit-agent.exeзатем щелкнитеAttach

введите описание изображения здесь

  1. На этом этапе точки останова в ваших тестах должны стать спелыми красными (из пустотелых).

  2. Нажмите Runна , Nunit Guiи вы должны получить точки останова хит ...

Надеюсь, это сэкономит вам время.

Матас Вайткявичюс
источник
2

Если вы можете заставить консоль / или графический интерфейс работать, но ваши точки останова не достигаются, это может быть связано с тем, что ваше приложение работает в другой среде выполнения .NET, чем NUnit. Проверьте, указана ли в nunit-console.exe.config / nunit.exe.config указанная среда выполнения (конфигурации находятся в том же каталоге, что и исполняемые файлы nunit.) Укажите среду выполнения с помощью узла запуска:

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>
Джастин Тернер
источник
2

Если путь к проекту содержит пробелы, например, «Новый проект» в пути <path>\bin\Debug\New Project\Quotes.Domain.Tests.dll заключите параметр «Пуск» -> Путь к проекту «Аргументы командной строки» в двойные кавычки.

Я потратил много времени, чтобы понять это.

Гьян Сада
источник
1

Относительно того, что сказал г-н Патрик Макдональд

Поскольку мой тестовый проект не является запускаемым проектом в решении, я запускаю свои тесты, щелкнув правой кнопкой мыши тестовый проект и выбрав «Отладка» -> «Начать новый экземпляр».

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

Абдул Рахман Каяли
источник
0

Похоже, вы пытаетесь использовать не ту библиотеку. NUnit может запуститься только в том случае, если используемая вами dll содержит TestFixtures.

+1 на TestDriven.Net. У меня была возможность использовать его несколько раз. Вы можете загрузить персональную версию для ознакомительных целей в соответствии с лицензией по адресу http://testdriven.net/purchase_licenses.aspx .

Mike737
источник
См. Недавнее изменение - у меня есть тестовое устройство, хотя вполне возможно, что я его неправильно настроил.
Джон Кейдж,
0

У меня такая же ошибка с MSTest. Я обнаружил, что в окне вывода теста некоторые тесты имеют повторяющиеся идентификаторы и не могут быть загружены. Я удалил все повторяющиеся тесты, и теперь я смог запустить тесты при запуске проекта.

Виджай
источник
0

Также есть расширение "Visual NUnit", которое позволит вам запускать тесты из Visual Studio, как и при сборке в тестовой среде. Проверьте это в диспетчере расширений.

iamkrillin
источник
0

Откройте Visual Studio ---> ваш проект ---> выберите "Свойства" ---> выберите "Отладка" -> выберите "Запустить внешнюю программу" и укажите путь к вашему NUnit (например: Запустить внешнюю программу = C : \ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe) ----> Сохранить

После установки просто нажмите Debug

Фариджа Хан
источник
0

Для меня решением было адаптировать файл конфигурации nunit. Чтобы использовать nunit с платформой 4.5-.Net и опцией сборки x64, мне пришлось добавить одну строку в тег запуска (поддерживаемая версия времени выполнения).

<startup useLegacyV2RuntimeActivationPolicy="true">
        <!-- Comment out the next line to force use of .NET 4.0 -->
        <supportedRuntime version="v4.0.30319" />
</startup>

После этого я мог начать, щелкнув правой кнопкой мыши Testproject Debug -> Start new instance. Раньше мне снова приходилось вручную присоединять проект к процессу.

Мои свойства отладки были: C: \ Program Files (x86) \ NUnit 2.6.4 \ bin \ nunit.exe с аргументом расположения тестируемой библиотеки DLL.

Дополнительная информация: nunit для тестирования с .NET 4.0

HauiB
источник
-1

Посмотрим, поможет ли это .. Как добавить NUnit в Visual Studio

(RighteousRant) Хотя лично мне этот подход не нравится ... Если вам нужен отладчик, пока вы тестируете свой код, это "запах" в том смысле, что вы недостаточно уверены / не знаете, как работает ваш код, и вам нужен отладчик. отладчик, чтобы сказать вам это. TDD избавит вас от необходимости в отладчике, если все сделано правильно. Используйте «Присоединить отладчик к NUNit» только в редких случаях или когда вы влезаете в чужой код.

Gishu
источник
Я пробовал там предложения безрезультатно. У тебя явно хороший нос. Я знаю, что мой код не работает, поскольку результат, который я получаю для первого блока реализации, дает совершенно разные ответы на мой тестовый справочник. Так что теперь я пытаюсь глубже найти причину проблемы. Я бы предпочел делать это изолированно от остальной части программы (отсюда необходимость запускать модульные тесты в режиме отладки). Для справки, это код, написанный кем-то другим, который был преобразован из алгоритма другого человека: - /
Джон Кейдж
Так что это попадает в последний пункт моей последней строчки :) Странно, что вы не можете заставить его работать, хотя ... очень плохо. Я бы сказал, просто прикрепите к процессу (Alt + D + P), не останавливаясь на нем ..
Гишу
Здесь нет запаха - у меня есть тестовый пример, который не работает в определенных средах (возвращается очень неправильный результат), и мне нужно выяснить, почему. Для этого я хочу отладить его и выяснить, где он терпит неудачу в этой среде, чтобы я мог исправить код и пройти тест везде. Это похоже на стандартный красно-зеленый шрифт ...
BrainSlugs83
@ BrainSlugs83 - я давно это не писал. Я (по-прежнему) против отладки ваших тестов как основной рабочей практики. Крайние случаи - я нормально перехожу к отладчику. Даже в этом случае я бы, вероятно, сначала вставил stmts для ведения журнала .. Я думаю, это связано с тем, что я наблюдал, как слишком много людей используют цикл Code-Crash-Debug-Adjust, который упрощается до цикла Code-Crash-Adjust с помощью отладчика постоянно горит.
Gishu