这个问题是关于单元测试框架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
的构造函数仅运行一次对于每个被测类(class)。因此,这取决于您要在两种方法之间准确选择的内容。
关于c# - xUnit.net:全局设置+拆卸?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12976319/