Как запустить 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

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

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

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

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

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

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

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

  2. Нажмите 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" только для редких случаев или когда вы пробираетесь в код другого пользователя.