Подтвердить что ты не робот

Каков наилучший способ отладки теста NUnit?

Моя платформа: Visual С# 2008 Express Edition с NUnit 2.2.7

У меня есть решение с моим кодом в одном проекте, а мои модули NUnit тестируются в другом проекте в том же решении.

Я изо всех сил старался отлаживать и выполнять одно шаг через тесты NUnit. Я нашел несколько ссылок в Интернете, в которых предлагалось вызвать следующее:

NUnit.ConsoleRunner.Runner.Main(args);

Но это даже не компилируется - у него есть ошибка компилятора:

Ошибка 1 Тип или имя пространства имен "Бегун" не существует в namespace 'NUnit.ConsoleRunner' (есть вам не хватает ссылки на сборку?)

Я добавил каждую ссылку на сборку, которую я мог найти, без эффекта.

Наконец, это то, что я взломал вместе, и это работает, но, возможно, вы, хорошие читатели, могли бы предложить лучшее решение:

1) В моем тестовом проекте имя класса тестового примера, которое я хочу отлаживать, это MyTestClass. Он имеет метод [TestFixtureSetUp] с именем Init(), и фактический тестовый пример находится в функции [Test] MyTest()

2) В моем проекте кода у меня есть консольная программа TestProgram.cs, которая компилируется в EXE.

В TestProgram.cs я вызываю тестовые примеры следующим образом

// First instantiate the test class
MyTestClass tc = new MyTestClass();

// Call the TestFixtureSetup method
tc.Init();

// Now call the actual test
tc.MyTest();

Это работает, и я могу отлаживать и выполнять один шаг через тестовые примеры.

Если у кого-то есть лучшие предложения, использующие Visual Studio 2008 Express, не платя за дополнительные плагины, я ценю ваш совет.

4b9b3361

Ответ 1

Джон как хороший способ, но не более автоматический;)

Вот что я уже сказал на SO:

Вы можете создать пустой проект (например, консольное приложение), а в свойстве проекта вы можете выбрать тег DEBUG и выбрать Start External Program. Поместите путь Нунита. Затем в параметре start аргументы командной строки выбирают DLL, содержащую все ваши тесты (моя всегда находится в nunit\bin...). Затем выберите Enable unmanaged code debugging, и вы сможете запустить проект внутри VS и даже использовать пошаговый отладчик.

Таким образом, вам не нужен макрос или что-то, что нужно делать каждый раз, это просто нормальный F5:)

Ответ 2

Поскольку вы используете экспресс-версию Visual Studio, вы не можете использовать бесплатную надстройку TestDriven.NET. Это несчастливо, потому что это действительно лучший инструмент, который я использовал для отладки модульных тестов.

Класс Runner можно найти в сборке nunit-console-runner.dll, поэтому не забудьте добавить ссылку на него. Я не уверен, что что-то делает, что ваша простая точка входа не работает, но, вероятно, лучше всего использовать ее для обеспечения безопасности и для будущей совместимости.

Еще один (грязный) вариант стоит упомянуть для вашего unit test для вызова Debugger.Attach(). Я не пробовал это с экспресс-установкой, но при запуске unit test вам должно быть предложено приложить отладчик. Затем вы можете выбрать существующий экземпляр VS и отладить его.

Ответ 4

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

Ответ 5

Я нашел несколько ссылок в Интернете, которые предложил назвать следующее: NUnit.ConsoleRunner.Runner.Main(args);Но это даже не компилируется - оно ошибка компилятора:

JFYI Вам нужно добавить ссылку .NET DLL на сборку nunit-console-runner в наборе DLL NUnit (у меня есть 2.2.4.0) Похоже, класс также был переименован, но его там, если он вам нужен.

NUnit.ConsoleRunner.ConsoleUi.Main(args);

Ответ 6

Если у вас установлен ReSharper, он должен иметь возможность обнаруживать ваши приборы [Test] и размещать значок слева от каждого используемого метода и слева от каждого тестового прибора для запуска всего. Я предпочитаю этот путь.

Большинство людей на работе также имеют TestDriven.NET, которые по какой-то причине не на моей машине, поэтому они задаются вопросом, что происходит. Это довольно забавно.