Исключение вторичного потока NUnit

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

Я подготовил этот тест, и в NUnit я вижу следующее:

LegacyImportWrapperTests.Import_ExceptionInImport_Ok : PassedSystem.ArgumentException: aaaaaaaaaa
at Import.Legacy.Tests.Stub.ImportStub.Import() in ImportStub.cs: line 51...

Но тест отмечен ЗЕЛЕНЫМ. Итак, NUnit знает об этом исключении, но почему он помечает тест как пройденный?


person Shaddix    schedule 20.08.2010    source источник


Ответы (1)


То, что вы можете видеть детали исключения в выходных данных, не обязательно означает, что NUnit знает об исключении.

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

bool exceptionWasThrown = false;
UnhandledExceptionEventHandler unhandledExceptionHandler = (s, e) =>
{
    if (!exceptionWasThrown)
    {
        exceptionWasThrown = true;
    }
};

AppDomain.CurrentDomain.UnhandledException += unhandledExceptionHandler;

// perform the test here, using whatever synchronization mechanisms needed
// to wait for threads to finish

// ...and detach the event handler
AppDomain.CurrentDomain.UnhandledException -= unhandledExceptionHandler;

// make assertions
Assert.IsFalse(exceptionWasThrown, "There was at least one unhandled exception");

Если вы хотите протестировать только определенные исключения, вы можете сделать это в обработчике событий:

UnhandledExceptionEventHandler unhandledExceptionHandler = (s, e) =>
{
    if (!exceptionWasThrown)
    {
        exceptionWasThrown = e.ExceptionObject.GetType() == 
                                 typeof(PassedSystem.ArgumentException);
    }
};
person Fredrik Mörk    schedule 20.08.2010