Каков наилучший способ отладки теста NUnit? - PullRequest
12 голосов
/ 08 ноября 2008

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

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

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

NUnit.ConsoleRunner.Runner.Main(args);

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

Ошибка 1 Тип или имя пространства имен «Бегун» не существует в пространство имен '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 без оплаты дополнительных плагинов , я ценю ваш совет.

Ответы [ 6 ]

3 голосов
/ 08 ноября 2008

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

Вот что я уже говорю о SO :

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

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

2 голосов
/ 09 февраля 2009

Посмотрите на http://nunit.com/blogs/?p=28

Это работает удовольствие.

2 голосов
/ 08 ноября 2008

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

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

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

0 голосов
/ 09 февраля 2009

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

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

0 голосов
/ 08 ноября 2008

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

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

NUnit.ConsoleRunner.ConsoleUi.Main(args);
0 голосов
/ 08 ноября 2008

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

...