Как запустить NUnit в режиме отладки из Visual Studio?
Я недавно создавал тестовую среду для немного С#, над которым я работал. У меня есть NUnit setup и новый проект в моей рабочей области для тестирования компонента. Все работает хорошо, если я загружаю свои модульные тесты из 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
Я использую консольную версию там, но попробовал также вызов GUI. Оба дают мне ту же ошибку, когда я пытаюсь начать отладку:
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...
}
}
}
... Я новичок в С# и в тестовой среде NUnit, поэтому вполне возможно, что я пропустил какой-то важный бит информации; -)
Окончательное решение. Большой проблемой был проект, который я использовал. Если вы выберете Other Languages -> Visual C# -> Test -> Test Project
... когда вы выберете тип проекта, Visual Studio попытается использовать его собственную среду тестирования, насколько я могу судить. Вместо этого вы должны выбрать обычный проект библиотеки классов С#, а затем инструкции в моем выбранном ответе будут работать.
Ответы
Ответ 1
Я использую ту же технику, что и вы, Jon, без флага/сборки, т.е.
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 все ваши тестовые светильники?
Поскольку мой тестовый проект не является проектом запуска в решении, я запускаю свои тесты, щелкнув правой кнопкой мыши на тестовом проекте и выбрав Debug → Start New Instance
Ответ 2
Когда мне нужно отлаживать тесты NUnit, я просто присоединяюсь к приложению NInit GUI nunit-agent.exe
, используя "Debug | Attach to Process" и запуская тесты из графического интерфейса. Любые точки останова в моих тестах (или код, который они тестируют) попадают. Я не понимаю ваш вопрос, или это будет работать на вас?
Ответ 3
Просто удалите строку, которая выглядит как
<ProjectTypeGuids>
{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>
из файла проекта.
Эта строка в основном сообщает VS.Net, что это тестовый проект, поэтому "Не удается запустить тестовый проект". FYI здесь 1st Guid говорит "это тест", второй говорит "это С#".
Для получения информации об этих гидах: http://www.mztools.com/Articles/2008/MZ2008017.aspx
Ответ 4
В дополнение к ответу, предоставленному @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.
Ответ 5
Если вы используете NUnit 2.4 или новее, вы можете поместить следующий код в свой SetUpFixture
класс. (Вы можете сделать это со старыми версиями, но вам нужно будет сделать любой эквивалент, который имеет значение SetUpFixture
, или скопировать его в сам тест.)
[SetUpFixture]
public class SetupFixtureClass
{
[SetUp]
public void StartTesting()
{
System.Diagnostics.Debugger.Launch();
}
}
Что означает Debugger.Launch()
, это вызывает появление следующего диалогового окна при нажатии кнопки "Выполнить внутри NUnit".
![JIT Debugger Dialog]()
Затем вы выбираете свой исполняемый экземпляр visual studio с открытым проектом (второй в моем скриншоте), тогда отладчик будет подключен, и в Visual Studio будут отображаться любые точки останова или исключения.
Ответ 6
В Nunit 3.0.1 (я использую VS2013), откройте в главном меню> Тест> Windows> Тестовый проводник. Затем в "Тестовом проводнике", щелкните правой кнопкой мыши тестовый пример, вы можете увидеть: ![enter image description here]()
Надеюсь это поможет.
Ответ 7
Установите TestDriven.NET, который является плагином для Visual Studio
Оттуда вы можете щелкнуть правой кнопкой мыши на вашей сборке unit test и нажать "Запустить тесты", чтобы запустить весь пакет, щелкните правой кнопкой мыши по классу TestFixture для запуска только тестов в этом классе или щелкните правой кнопкой мыши на методе "Тест" для запуска просто этот метод.
У вас также есть возможность тестирования с помощью отладчика, если вам нужно установить точку останова в своих тестах в режиме отладки.
Ответ 8
Попробуйте NUnitit - приложение Visual Studio для разработчиков с открытым исходным кодом для отладки тестов NUnit Test
Главная страница - http://nunitit.codeplex.com/
Ответ 9
Удалить ProjectTypeGuids из файла проекта.
Ответ 10
Если путь к проекту содержит пробелы, например. "Новый проект" в пути <path>\bin\Debug\New Project\Quotes.Domain.Tests.dll
затем включите путь проекта "Пуск" → "Аргументы командной строки" в двойных кавычках.
Я потратил много времени, чтобы понять это.
Ответ 11
Если вы можете использовать консоль/графический интерфейс, но ваши точки останова не попадают, возможно, это связано с тем, что в вашем приложении выполняется среда выполнения .NET, чем у NUnit. Проверьте, есть ли у вашего nunit-console.exe.config/nunit.exe.config указанная среда выполнения. (Конфигурации живут в том же каталоге, что и nunit exe.) Укажите время выполнения с помощью запуска node:
<configuration>
<startup>
<supportedRuntime version="4.0" />
</startup>
Ответ 12
Теперь с картинками:
![введите описание изображения здесь]()
-
Выберите свой тест .dll
из папки bin (C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll
)
-
Перейдите в Visual Studio Debug -> Attach to process
(откроется окно Attach to process)
-
В списке прокрутите вниз и выберите nunit-agent.exe
, затем нажмите Attach
![введите описание изображения здесь]()
-
В этот момент точки останова в ваших тестах должны стать зрелыми красными (из полых).
-
Нажмите Run
на Nunit Gui
, и вы должны получить свой рейтинг точки останова...
Надеюсь, это сэкономит вам некоторое время.
Ответ 13
Относительно того, что сказал Патрик Макдональд
Поскольку мой тестовый проект не является проектом запуска в решении, я запускаю свои тесты, щелкнув правой кнопкой мыши на тестовом проекте и выбрав Debug → Start New Instance
Я попытался подать заявку на мою тестовую библиотеку классов, но получил некоторую ошибку относительно пути, поэтому я попытался удалить "Аргументы командной строки", и, к счастью, он работал хорошо и как ожидалось.
Ответ 14
Похоже, вы пытаетесь использовать неправильную библиотеку. NUnit может запускаться только в том случае, если используемая dll содержит TestFixtures.
+1 на TestDriven.Net. У меня была возможность использовать его несколько раз.
Вы можете загрузить личную версию для целей оценки в соответствии с лицензией на http://testdriven.net/purchase_licenses.aspx.
Ответ 15
Я получил ту же ошибку с MSTest. Я обнаружил, что в окне Test Output некоторые из тестов имели дубликаты идентификаторов и не могли быть загружены. Я удалил все повторяющиеся тесты, и теперь я смог запустить тесты при запуске проекта.
Ответ 16
Существует также расширение "Visual NUnit", которое позволит вам запускать тесты из Visual Studio так же, как сборка в обработчиках тестовых фреймов. Проверьте его в диспетчере расширения.
Ответ 17
Откройте Visual Studio --- > ваш проект --- > Выберите "Свойства" --- > Выберите "Отладка" → Выберите "Запустить внешнюю программу" и укажите путь к вашему NUnit (например: Запустить внешний program = C:\Program Files\NUnit 2.6.2\bin\nunit.exe) ---- > Сохранить
После установки этого параметра просто нажмите "Отладка"
Ответ 18
Для меня решение заключалось в адаптации файла конфигурации nunit. Чтобы использовать nunit с 4.5-.Net framework и возможностью сборки x64, мне пришлось добавить одну строку в тег запуска (поддерживаемая версия исполнения).
<startup useLegacyV2RuntimeActivationPolicy="true">
<!-- Comment out the next line to force use of .NET 4.0 -->
<supportedRuntime version="v4.0.30319" />
</startup>
Впоследствии я мог бы начать, щелкнув правой кнопкой мыши на Testproject Debug → Запустить новый экземпляр.
Раньше мне нужно было вручную подключить проект к процессу.
Мои свойства Debug были,
C:\Program Files (x86)\NUnit 2.6.4\bin\nunit.exe
с аргументом местоположения .dll для тестирования.
Дополнительная информация: nunit для тестирования с .NET 4.0
Ответ 19
Есть какие-нибудь обновления по этому поводу с VS 2017? Я попробовал каждый из них. Я могу заставить тесты запускаться с консоли, но они не ломаются ни на одной из моих точек останова в тестах. Я сделал обновления файла .config, но не игра в кости. PS Я не считаю, что nunit gui runner не является жизнеспособным решением этой проблемы, поэтому вместо этого я могу просто запустить отладку из VS. Я гораздо больше заинтересован в создании простого F5.
Ответ 20
Посмотрите, поможет ли это.
Как добавить NUnit в Visual Studio
(RighteousRant) Хотя лично мне не нравится этот подход. Если вам нужен отладчик, когда вы тестируете свой код, это "запах" в том, что вам не хватает уверенности/знаю, как работает ваш код и вам нужен отладчик, чтобы сказать вам об этом. TDD должен освободить вас от необходимости отладки, если все сделано правильно. Используйте "Прикрепить отладчик к NUNit" только для редких случаев или когда вы пробираетесь в код другого пользователя.