2013-10-16 13 views
7

Vorrei testare un metodo che mi aspetto di bloccare in una situazione specifica.È possibile che NUnit si aspetti un timeout?

ho provato una combinazione di TimeoutAttribute e ExpectedExceptionAttribute:

[Test] 
[Timeout(50), ExpectedException(typeof(ThreadAbortException))] 
public void BlockingCallShouldBlock() 
{ 
    this.SomeBlockingCall(); 
} 

Purtroppo questo non funziona come il ThreadAbortException stavo leggendo su here sembra farsi prendere dal NUnit per sé.

C'è un modo per aspettarsi timeout (con NUnit)?

risposta

5

Per un problema di questo tipo, probabilmente utilizzerò Task e Task.Wait(int) o Task.Wait(TimeSpan). Per esempio:

[Test] 
public void BlockingCallShouldBlock() 
{ 
    var task = Task.Run(() => SomeBlockingCall()); 
    var completedInTime = task.Wait(50); // Also an overload available for TimeSpan 
    Expect(completedInTime, Is.False); 
} 

Essere avvertito tuttavia, questo sarà invocare SomeBlockingCall su un thread in background, ma per la maggior parte dei test di unità, questo è un non-problema.

Problemi correlati