我有许多跨多个类的xUnit测试。这些类中的许多依赖于在每次测试之前调用一个setup方法,以及在每次测试之后调用一个cleanup方法。
在每个测试类中,我都有一个构造函数,它调用setup方法和如下所示的dispose方法来清理:
public override void Dispose()
{
Cleanup();
}
每个测试类都扩展了一个基类,该基类扩展了继承IDisposable
的类。
当我在单个测试类中运行测试时,所有测试都运行良好,并且正确地调用了dispose方法。
当我使用Visual Studio中的测试资源管理器运行解决方案中的所有测试时,由于没有调用cleanup方法,很多测试都失败了。当我调试测试时,我没有看到dispose被调用。
我安装了xunit.runner.visualstudio
NuGet包,以便在Visual Studio 2019中运行测试。我使用的是xUnit 2.4.1。
有人知道我一次运行所有测试时为什么没有调用dispose吗?
它确实创建了一些共享状态,需要在每次测试并在之后进行清理
xUnit默认情况下并行执行不同类的测试。因为您在测试之间使用共享状态,所以需要按顺序执行所有测试。
为了按顺序执行测试,将所有使用共享状态的测试分组为一个"测试集合"。
来自文档
何时使用:当您想要创建单个测试上下文并在多个测试类中的测试之间共享它,并在测试类中的所有测试都已完成。
https://xunit.net/docs/shared-context