Обработчик AppDomain.UnhandledException не запускается в модульном тесте - PullRequest
4 голосов
/ 06 февраля 2012

В приведенном ниже фрагменте кода почему не запускается подключенный обработчик (события AppDomain.CurrentDomain.UnhandledException), когда в модульном тесте генерируется исключение?

Я использую NUnit 2.5.10 с TestDriven.NET 3.0 на VS2010.

[TestFixture]
public class MyTests {

    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
        Console.WriteLine("Gotcha!");
    }

    [Test]
    public void ExceptionTest1() {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        throw new Exception("ExceptionInTest");
    }

}

Вывод: (нет ошибок)

------ Test started: Assembly: WcfQueue.Test.dll ------

Test 'xxxxx.Test.MyTests.ExceptionTest1' failed: System.Exception : ExceptionInTest
    ProgramTests.cs(83,0): at xxxxx.Test.MyTests.ExceptionTest1()

0 passed, 1 failed, 0 skipped, took 1.98 seconds (NUnit 2.5.5).

Обновление: Цель этого вопроса - НЕ проверять .Net framework или NUnit.Я просто хочу выяснить причину, по которой в модульном тесте обработчик не сработал.

Ответы [ 3 ]

3 голосов
/ 06 февраля 2012

Исключение будет пропускать стек вызовов до тех пор, пока вы не достигнете блока try / catch, который может обработать это исключение, границу AppDomain или вершину стека (в таком порядке приоритетов).

Если вы выполняете в том же AppDomain, который дает вам NUnit, NUnit поймает ваше исключение. Это вытесняет материал границы AppDomain, который вызвал бы ваше событие.

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

2 голосов
/ 06 февраля 2012

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

2 голосов
/ 06 февраля 2012

Я думаю, событие не сработало, потому что обработано исключение.По тестовой среде для генерации отчета.

...