Ich versuche, einen Komponententest zu schreiben, um Code in unserer "letzten Chance Exception Handler" zu decken.Test Letzte Chance Ausnahmebehandlung
Bei Verweisen auf die letzte Chance Ausnahmebehandlung Ich spreche von Event-Handler der Ereignisse:
Application.ThreadException AppDomain.CurrentDomain.UnhandledException
Mehr oder weniger bin ich überprüfen, ob Protokolle erzeugt werden Detaillierung die von der Ausnahme erzeugten Informationen. Mein Test ist ähnlich:
[Test]
public void TestMethod()
{
//Setup log4net ConsoleAppender here
//hooking a MemoryStream to the Console.SetOut done here
ExceptionHandler.InstallExceptionHandler();
Thread exceptionThread = new Thread(ThrowException);
Thread.Start();
//read stream here
Assert.That(streamContainsExceptionText);
}
private void ThrowException() {
throw new Exception("Unhandled Exception");
}
Der Exception Handler ist ein Singleton, dass, wenn „Installiert“ nur Handler zu den zuvor gegebenen Ereignisse hinzufügt. Das Seltsame ist, dass ich keine konsistenten Ergebnisse habe. Das Brechen und Debuggen scheint keine Option zu sein, da es zwischen der Ausnahme und dem ExceptionHandler zu liegen scheint.
Ich platziere mehrere "Console.WriteLine()" Anweisungen im gesamten Code, um zu überprüfen, wo der Code fehlgeschlagen ist, aber dies ist nicht konsistent. Ich glaube, es hat etwas damit zu tun, dass der Test Framework den Thread oder möglicherweise eine Art Garbage-Collection löscht.
Hat jemand Erfahrung damit gehabt, ein Stück Code wie diesen zu testen? Oder haben Sie einen Einblick, warum ich diese Art von Verhalten sehe?
Ich benutze NUnit 2.4 und läuft es in der IDE mit ReSharper.
Danke, ich werde das versuchen, sobald ich kann. –