2013-10-16 13 views
7

特定の状況でブロックすることを期待しているメソッドをテストしたいと思います。NUnitはタイムアウトを期待できますか?

私はTimeoutAttributeExpectedExceptionAttributeの組み合わせを試してみました:

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

残念ながら、これは私がhereについて読んでいたThreadAbortExceptionとして動作しませんがNUnitのそれ自体で捕まるようです。

(NUnitで)タイムアウトが予想される方法はありますか?

答えて

5

このような問題については、おそらくTaskTask.Wait(int)またはTask.Wait(TimeSpan)を使用します。たとえば:

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

しかし警告され、これは、バックグラウンドスレッドでSomeBlockingCallを起動しますが、ユニットテストの大多数のため、これは非問題です。

関連する問題