测试框架如何停止执行正在运行的测试

本文关键字:测试 运行 执行 框架 何停止 | 更新日期: 2023-09-27 18:37:19

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

测试框架如何停止执行正在运行的测试

在快速浏览源代码后,似乎Thread.Abort()是选择的机制。 乍一看这是有道理的,因为运行器需要执行任意代码,然后立即终止它。

查看 NUnit 的源 (v3),当指定超时值时,它会强制测试到单独的线程上。 然后,如果测试超过其超时值,则通过调用 Thread.Abort() 将其终止。

与 MbUnit (v3) 类似,它使用创建System.Threading.Timer的沙箱在单独的线程上运行测试。 当该计时器过期时,它会在沙盒上调用Abort(),沙盒会在正在运行的测试中调用Thread.Abort()

此外,根据参考来源,我没有看到Thread.Abort()标记为过时/已弃用。