Исключение вторичного потока NUnit - PullRequest
4 голосов
/ 20 августа 2010

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

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

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

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

1 Ответ

5 голосов
/ 20 августа 2010

То, что вы можете видеть детали исключения в выходных данных, не обязательно означает, что 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);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...