2013-08-14 11 views
13

Ho un test che utilizza un assieme esterno per accedere alle funzionalità dell'interfaccia utente nell'applicazione che stiamo testando. Questo assembly genera un'eccezione del proprio tipo personalizzato se l'interfaccia utente non è nello stato appropriato.Il metodo MsTest TestCleanup non viene chiamato quando viene generata un'eccezione non gestita

Ho impostato un metodo TestCleanup che uccide il processo dell'applicazione (mentre un TestInitialize lo avvia) in modo che, al termine dell'esecuzione di un test, l'interfaccia utente venga riavviata con uno stato pulito.

Questo funziona bene in condizioni normali, tuttavia, ogni volta che viene lanciata un'eccezione dall'assieme di riferimento, non arriva mai al metodo di pulizia e salta direttamente al test successivo. Questo non accade con le eccezioni generate dal test stesso, come AssertFailedException. Ho persino provato a lanciare un'eccezione di base dal test e ho ottenuto il metodo di pulizia.

+0

Che tipo di eccezione viene lanciata? Se ci provi, prova a prenderlo? È davvero un'eccezione o un duro incidente? Prova e crea uno scenario riproducibile che può essere pubblicato qui. –

+0

È un'eccezione personalizzata implementata nell'assieme esterno che eredita direttamente da Exception. È un'eccezione .net autentica, semplice, senza crash o nulla del genere. E sì, un blocco try-catch potrebbe prenderlo - ma ciò significa che dovrò circondare ogni test con esso e chiamare Assert.Fail su catch. Tuttavia, come ho menzionato nel mio post originale, se lancio un System.Exception dal ** test stesso **, MSTest non si bloccherà e colpirà il metodo Cleanup come richiesto. –

+0

Puoi riproarlo usando il tuo codice? Ho provato e non ho potuto ricreare lo scenario in cui non è stata eseguita la pulizia. –

risposta

0

Questo diverge, purtroppo, dal modo in cui C# gestisce le eccezioni nei costruttori: quando questo accade, il finalizzatore è chiamato.

Problemi correlati