这个问题是关于单元测试框架xUnit.net的.

我需要在执行任何测试之前运行一些代码,在所有测试完成之后也需要运行一些代码.我以为应该有某种属性或标记接口来指示全局初始化和终止代码,但找不到它们.

或者,如果我以编程方式调用xUnit,我还可以使用以下代码实现我想要的功能:

static void Main()
{
    try
    {
        MyGlobalSetup();
        RunAllTests();  // What goes into this method?
    }
    finally
    {
        MyGlobalTeardown();
    }
}

有谁能给我一个提示,告诉我如何以声明或编程方式运行一些全局设置/拆卸代码?

推荐答案

据我所知,xUnit没有全局初始化/拆卸扩展点.然而,创建一个是很容易的.只需创建一个实现IDisposable的基本测试类,并在构造函数中进行初始化,在IDisposable.Dispose方法中进行拆卸.这看起来像这样:

public abstract class TestsBase : IDisposable
{
    protected TestsBase()
    {
        // Do "global" initialization here; Called before every test method.
    }

    public void Dispose()
    {
        // Do "global" teardown here; Called after every test method.
    }
}

public class DummyTests : TestsBase
{
    // Add test methods
}

但是,每次调用都会执行基类设置和拆卸代码.这可能不是你想要的,因为它效率不高.更优化的版本将使用IClassFixture<T>接口,以确保全局初始化/拆卸功能只调用一次.对于这个版本,您不会从测试类扩展基类,而是实现IClassFixture<T>接口,其中T表示fixture类:

using Xunit;

public class TestsFixture : IDisposable
{
    public TestsFixture ()
    {
        // Do "global" initialization here; Only called once.
    }

    public void Dispose()
    {
        // Do "global" teardown here; Only called once.
    }
}

public class DummyTests : IClassFixture<TestsFixture>
{
    public DummyTests(TestsFixture data)
    {
    }
}

这会导致TestsFixture的构造函数只运行一次

.net相关问答推荐

dotnet ef dbcontext scaffold command --data-annotations 或 -d 命令行参数似乎不起作用

使用 MassTransit、.NET Core 和 RabbitMQ 的设计挑战

IANA 到 Windows 时区映射

使用 SSH.NET 查找具有特定文件名的最新 SFTP 文件

在 C# 中,如何使用泛型的基类将泛型接口的所有实例注入到单个构造函数中?

问:在 Blazor WASM 应用程序中存储 api 密钥的最佳方式是什么?

错误 NU1605 检测到包降级

如何为构造函数自定义 Visual Studio 的私有字段生成快捷方式?

为什么 HashSet 比 HashSet 慢这么多?

.NET Core 是否支持异步控制台应用程序?

找不到库 hostpolicy.dll

ASP.NET Core 等效于 ASP.NET MVC 5 的 HttpException

返回 IList 是否比返回 T[] 或 List 更糟糕?

这在技术上是“Hello World”的 O(1) 算法吗?

如何使我的托管 NuGet 包支持 C++/CLI 项目?

如何下载没有 nuget.exe 或 Visual Studio 扩展的 Nuget 包?

禁用 SSL 回退并仅将 TLS 用于 .NET 中的出站连接? (贵宾犬缓解)

如何找到特定 dll 的 PublicKeyToken?

Microsoft.Bcl.Build NuGet 包有什么作用?

NuGet 自动包还原不适用于 MSBuild