从VS中的多个类运行测试时未调用Dispose



我有许多跨多个类的xUnit测试。这些类中的许多依赖于在每次测试之前调用一个setup方法,以及在每次测试之后调用一个cleanup方法。

在每个测试类中,我都有一个构造函数,它调用setup方法和如下所示的dispose方法来清理:

public override void Dispose()
{
Cleanup();
}

每个测试类都扩展了一个基类,该基类扩展了继承IDisposable的类。

当我在单个测试类中运行测试时,所有测试都运行良好,并且正确地调用了dispose方法。

当我使用Visual Studio中的测试资源管理器运行解决方案中的所有测试时,由于没有调用cleanup方法,很多测试都失败了。当我调试测试时,我没有看到dispose被调用。

我安装了xunit.runner.visualstudioNuGet包,以便在Visual Studio 2019中运行测试。我使用的是xUnit 2.4.1。

有人知道我一次运行所有测试时为什么没有调用dispose吗?

它确实创建了一些共享状态,需要在每次测试并在之后进行清理

xUnit默认情况下并行执行不同类的测试。因为您在测试之间使用共享状态,所以需要按顺序执行所有测试。

为了按顺序执行测试,将所有使用共享状态的测试分组为一个"测试集合"。

来自文档

何时使用:当您想要创建单个测试上下文并在多个测试类中的测试之间共享它,并在测试类中的所有测试都已完成。

https://xunit.net/docs/shared-context

相关内容

最新更新