2013-10-16 17 views
7

Belirli bir durumda engellemeyi beklediğim bir yöntemi test etmek istiyorum. yaklaşık here NUnit kendisi tarafından yakalanmak gibi görünüyorNUnit bir zaman aşımı bekleyebilir mi?

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

Ne yazık ki bu okuyordum ThreadAbortException olarak çalışmaz:

Ben TimeoutAttribute ve ExpectedExceptionAttribute bir arada çalıştı.

Zaman aşımları (NUnit ile) beklemenin bir yolu var mı?

cevap

5

Böyle bir sorun için, muhtemelen Task ve Task.Wait(int) veya Task.Wait(TimeSpan) kullanırdım. Örneğin:

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

Ancak Dikkat edin, bu bir arka plan iş parçacığı üzerinde SomeBlockingCall çağırmak, ancak birim testlerinin çoğunluğu için, bu olmayan bir konudur.