2012-02-15 3 views
7

У меня есть решение .NET 4.0 C# с проектом тестирования, который запускает модульные тесты под NUnit. Бинарные файлы NUnit - v3.5.Отладка тестов под управлением NUnit

Я могу отлично провести тесты, но не могу установить точки останова и один шаг в визуальной студии. Я предполагаю, что это вызвано неправильным совпадением в версиях .NET. Есть ли способ сделать один шаг через сборку тестов v4.0 с помощью nunit для v3.5?

+0

Вы должны иметь возможность установить контрольные точки в этом случае. Как вы выполняете тесты и как вы присоединяете отладчик? –

+0

@FrankSchwieterman Свойства отладки моего проекта имеют действие начала, которое указывает на nunit-console.exe и аргументы командной строки, содержащие аргументы nunit. Я устанавливаю контрольные точки, а затем выбираю Debug в explorer для тестов csproj. Отладчик работает, и состояние точки останова изменяется с ошибкой «символы не могут быть загружены» – simonc

+0

хмм это не похоже на визуальную студию, прикрепленную к процессу, выполняющему ваши тесты (он будет прикреплен к любому приложению, на которое вы нажмете f5, хотя это приложение имеет шаг сборки для запуска NUNit) –

ответ

21

Проблема заключается в том, что если вы не укажете об этом иначе, NUnit создаст подпроцесс для запуска тестов, когда он это определит. Если вы посмотрите его в Process Explorer, вы увидите, что «nunit-console.exe» * порождает «nunit-agent.exe» *. Отладчик Visual Studio автоматически не присоединяется к дочерним процессам.

В этом случае, я считаю, что несоответствие версии является причиной того, что он хочет начать подпроцесс. Самый простой способ обойти это - отредактировать «nunit-console.exe.config» *, чтобы изменить набор значений <supportedRuntime>. Там уже должно быть комментарием там маркировки линии, что вы должны закомментировать для того, чтобы заставить его работать как .NET 4.0:

<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> 

После того, как вы меняете, что первый процесс NUnit уже будет .NET 4.0 и ему не нужно будет создавать подпроцесс. Если вы хотите быть уверенным, укажите /process=Single, и NUnit либо запустится в одном процессе, либо не сразу, если не сможет.

* - Если вам нужно использовать версии x86, заменитель:

nunit-console.exe  -> nunit-console-x86.exe 
nunit-agent.exe   -> nunit-agent-x86.exe 
nunit-console.exe.config -> nunit-console-x86.exe.config 
+0

Спасибо, что сделал трюк – simonc

+0

Awesome, спасибо. Я видел, что вы должны были добавить поддерживаемые элементы Runtime, которые не сработали. Я не заметил, что использовал версию x86, и у меня был собственный файл конфигурации. – neminem

+0

как насчет /framework:net-4.0? – bmargulies

1

Resharper позволяет вам выполнять свои модульные тесты во время отладки. Но я не думаю, что вы можете сделать то же самое с Visual Studio. Попробуйте установить пробную версию Resharper, а затем попытайтесь отладить тесты.

+0

Resharper иногда тоже не преуспевает - когда вы пытаетесь сделать один шаг, он пробивает право на следующую точку останова. Иногда это случается. Не знаю, почему =) –

+0

Спасибо, что работает красиво. Я уверен, что имел обыкновение делать это с помощью Visual Studio, но также работает через ReSharper! – simonc

+0

Если вы хотите использовать Visual Studio без Resharper, вам будет лучше, если вы используете MSTest вместо NUnit. Различия в синтаксисе довольно минимальны. – gprasant

1

Я не сомневаюсь в консольном приложении, но вы должны найти, что вы можете запустить графическую версию NUnit вручную, а затем подключиться к процессу nunit-agent из отладчика в Visual Studio.

+0

Спасибо, знаете ли, что это все еще доступно в nunit 2.6? Я могу видеть код для nunit-gui, но не вижу exe в предварительно созданных двоичных файлах. – simonc

+1

* nunit.exe * - это версия графического интерфейса пользователя. * nunit-console.exe * - это консольная версия. Запуск nunit.exe вызовет процесс nunit-agent. –

2

Другой вариант - использовать http://testdriven.net/ для запуска ваших тестов через Visual Studio, вы можете поместить контрольную точку на тест & правой кнопкой мыши -> запустить тесты -> с отладчиком.

3

В случае полезно кому-то я знаю, что это 4-х лет, но я последовал за ответы здесь, и они были полезны. Хотя мой ответ для другой цельной версии NUnit, однако, для кого-то вроде меня, который только что открыл это, я установил NUnit и NUnit Console через Manage NuGet Packages ... (1-й и 3-й варианты на снимке экрана) enter image description here и так сконфигурирован мои свойства тестового проекта. Вкладка «Отладка» (см. следующий снимок экрана ниже) в версии VS2015 Community для запуска nunit3-console.exe, которая находится в папке \ packages, которая автоматически создается при установке «NUnit Console», и для аргументов, которые я добавил DLL тестовой библиотеки и ключи командной строки --wait (что побуждает разработчика «Нажать любую клавишу для закрытия», чтобы вы могли увидеть результат), и, что более важно, - процесс, который автоматически присоединяет вашу тестовую библиотеку .NET, чтобы ваши точки останова попали.

enter image description here

Примечание для запуска консольного приложения NUnit3 вы установите тестовый проект в качестве запуска проекта.

+0

Точно, что я хотел Спасибо – user515867