gpt4 book ai didi

c# - xUnit.net:全局设置+拆卸?

转载 作者:IT王子 更新时间:2023-10-29 03:40:31 29 4
gpt4 key购买 nike

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

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

或者,如果我以编程方式调用 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>接口(interface)以确保全局初始化/拆卸功能仅被调用一次。对于这个版本,您不从测试类扩展基类,而是实现 IClassFixture<T>接口(interface)在哪里T指的是你的夹具类:

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 的构造函数只运行一次对于每个被测类。因此,这取决于您究竟想要在这两种方法之间进行选择。

关于c# - xUnit.net:全局设置+拆卸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976319/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com