这个问题是关于单元测试框架的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
指您的灯具类别:
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)
{
}
}
This will结果是构造函数TestsFixture
只运行一次
对于每个被测试的班级。因此,这取决于您想要在两种方法之间进行选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)