2016-03-03 147 views
0

我正在.NET中实现我自己的测试框架,并遇到了如何正确停止正在运行的测试执行的问题。正在执行的测试方法显然不合作,因此我无法使用CancellationTokenSource,并且已弃用Thread.Abort()。现有的测试框架如NUnit如何处理这个问题?测试框架如何停止运行测试的执行?

回答

1

经过仔细阅读源代码,似乎Thread.Abort()是选择的机制。乍一看这很有道理,因为跑步者需要执行任意代码,然后立即杀死它。

查看NUnit的源代码(v3),当指定超时值时,它强制测试onto a separate thread。然后,如果测试超过其超时值,则通过Thread.Abort()调用is killed

与MbUnit(v3)类似,它在separate thread using a sandbox上运行测试,创建System.Threading.Timer。当该定时器到期时,它会调用Abort() on the sandbox,在运行测试中调用Thread.Abort()

另外,according to Reference Source我没有看到Thread.Abort()被标记为废弃/弃用。

+0

好吧,不推荐使用,但是在任何地方您都应该阅读它,因为它很危险并且可能导致无效状态,所以我想我没有其他选择。 – user2849936