2013-02-26 10 views
5

Ho un test di integrazione che utilizza più thread. Mi piacerebbe che qualsiasi thread fosse in grado di fallire il test (e abbattere il resto). Tuttavia, un'eccezione in un thread in background provoca MSTest a fallire - si ottiene semplicemente un errore:Fail a MSTest dai thread in background

The agent process was stopped while the test was running

Suppongo che potrei prendere eventuali eccezioni su sfondo discussioni, e svegliarsi il thread principale a fallire il test, ma è c'è un modo più semplice/più elegante?

+1

Dovrete bloccare il thread "principale" (il filo di test runner) fino a quando il thread in background ha completato - poi non riescono con 'Assert' sul filo di prova corridore . se non blocchi questo thread, il corridore può uscire prima che il thread in background sia completato. Se fornisci un esempio di ciò che hai provato, qualcuno potrebbe probabilmente darti un'alternativa. –

risposta

0

Se è assolutamente necessario utilizzare diversi thread (e non un ThreadPool uno) si potrebbe usare un Task con TaskCreationOptions.LongRunning opzione che creerà un thread dedicato per quel compito (e non uno dalla ThreadPool). Quindi è possibile esaminare le proprietà IsFaulted e Exception di tale attività. Si tratta di un semplice codice per questo:

var task = new Task(() => { throw new InvalidOperationException(); }, TaskCreationOptions.LongRunning); 
task.Start(); 
try { task.Wait(); } 
catch { } 

if (task.IsFaulted) 
{ 
    // do something about the exception 
    Console.WriteLine(task.Exception); 
} 
Problemi correlati