7

我想测试一种我希望在特定情况下阻止的方法。

我尝试了TimeoutAttribute和的组合ExpectedExceptionAttribute

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

不幸的是,这不起作用,因为我在这里ThreadAbortException读到的似乎被 NUnit 本身抓住了。

有没有办法期望超时(使用 NUnit)?

4

1 回答 1

6

对于这样的问题,我可能会使用Taskand Task.Wait(int)or 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在后台线程上调用,但对于大多数单元测试来说,这不是问题。

于 2013-11-19T11:09:25.717 回答