2013-10-16 32 views
7

我想测试一种方法,我期望在特定情况下阻止。NUnit能期待超时吗?

我试过TimeoutAttributeExpectedExceptionAttribute的组合:

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

不幸的是,这并不为ThreadAbortException工作,我正在读关于here似乎得到由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在后台线程,但对于大多数的单元测试,这是一个非问题。