Отладка тестов Nunit в Visual Studio C # Express 2010 - PullRequest
7 голосов
/ 04 августа 2011

Я следовал этому совету, чтобы отладка работала для тестов NUnit.

http://www.blackwasp.co.uk/NUnitCSharpExpress.aspx

Однако у меня есть несколько тестов, которые выполняют Assert.Throws<...>, что приводит к сбою отладчика, когда возникает исключение, для которого я проверяю, когда я действительно хочу, чтобы оно сломалось, если исключение происходит за пределами этих вызовов.

Как заставить отладчик игнорировать исключения, вызванные этими методами?


РЕДАКТИРОВАТЬ: я событие попробовал ниже, который не работает!

[Test]
public void InstanciatingWithNullParameterThrowsException()
{
    try
    {
        Assert.Throws<ArgumentNullException>(() => new CachedStreamingEnumerable<int>(null));
        // This still throws and stops be being able to debug tests called after this one
    }
    catch
    {

    }
}

Ответы [ 4 ]

4 голосов
/ 04 августа 2011

Вот что сработало для меня (хотя в Visual Studio Professional, а не в Express, но, думаю, это не имеет значения).

  • Откройте диалог «Исключения», как предложеноNinjapig.

  • Нажмите кнопку Add..., чтобы открыть диалоговое окно «Новое исключение».

  • Выберите «Исключения времени выполнения общего языка» в выпадающем менювниз
  • В поле «Правка» введите «NUnit.Framework.AssertionException».
  • Нажмите OK, чтобы закрыть диалоговое окно «Новое исключение».
  • Вернувшись в диалоговое окно «Исключения», убедитесь, что оба флажка (Thrown и User-unhandled) не проверены .

Теперь отладчик должен полностью игнорировать ошибку подтверждения NUnit (то есть, выброшен, пойман или нет, NUnit.Framework.AssertionException).

ОБНОВЛЕНИЕ : Это предотвратит взлом только отладчика,оно не может игнорировать само исключение;то есть это не изменит фактический поток программы.Помимо изменения или замены или инкапсуляции вызовов Assert в блоки try-catch, я не думаю, что есть что-то, что может достичь этого (по крайней мере, не автоматически).

0 голосов
/ 10 августа 2011

У меня была такая же проблема. Хотя ваш оригинальный подход (без использования блока try...catch) работает для большинства типов исключений, ArgumentNullException не работает. Я исправил это так:

[Test]
public void InstanciatingWithNullParameterThrowsException()
{
    bool isArgumentNullExceptionThrown = false;
    try
    {
       new CachedStreamingEnumerable<int>(null);
    }
    catch (ArgumentNullException)
    {
        isArgumentNullExceptionThrown = true;
    }
    Assert.That(isArgumentNullExceptionThrown);
}

Это не так элегантно, но, похоже, работает.

0 голосов
/ 05 августа 2011

Я закончил ссылаться на nunit-gui-runner.dll и вызывать его как

NUnit.Gui.AppEntry.Main(new string[] { Dll });

Это вызывает графический интерфейс NUnit. Затем я могу запустить конкретный интересующий меня тест.

0 голосов
/ 04 августа 2011

Я не уверен, если VS2010 Express имеет эту опцию, но вы можете выбрать исключения для разрыва.

Перейдите в меню «Отладка», затем выберите «Исключения» Menu options

и отсюда вы можете выбрать, какие исключения разбивать на Exceptions selection window

...