我正在.NET中实现自己的测试框架,并遇到了如何正确停止执行正在运行的测试的问题。正在执行的测试方法显然不合作,所以我不能使用 CancelTokenSource,并且 Thread.Abort() 已被弃用。像 NUnit 这样的现有测试框架如何处理这个问题?
在快速浏览源代码后,似乎Thread.Abort()
是选择的机制。 乍一看这是有道理的,因为运行器需要执行任意代码,然后立即终止它。
查看 NUnit 的源 (v3),当指定超时值时,它会强制测试到单独的线程上。 然后,如果测试超过其超时值,则通过调用 Thread.Abort()
将其终止。
与 MbUnit (v3) 类似,它使用创建System.Threading.Timer
的沙箱在单独的线程上运行测试。 当该计时器过期时,它会在沙盒上调用Abort()
,沙盒会在正在运行的测试中调用Thread.Abort()
。
此外,根据参考来源,我没有看到Thread.Abort()
标记为过时/已弃用。