这个问题是关于单元测试框架xUnit.net.
我需要在执行任何测试之前运行一些代码,并在完成所有测试之后运行一些代码.我认为应该有某种属性或标记接口来指示全局初始化和终止代码,但是找不到它们.
或者,如果我以编程方式调用xUnit,我也可以使用以下代码实现我想要的:
static void Main()
{
try
{
MyGlobalSetup();
RunAllTests(); // What goes into this method?
}
finally
{
MyGlobalTeardown();
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一些关于如何以声明方式或以编程方式运行某些全局设置/拆卸代码的提示吗?
我试图了解终结和析构函数如何在C#中工作,我试图在System.Object.Finalize示例中运行代码(代码复制粘贴,没有做出任何更改),但输出与预期的不一样,它表明析构函数是从未打电话过
代码是:
using System;
using System.Diagnostics;
public class ExampleClass
{
Stopwatch sw;
public ExampleClass()
{
sw = Stopwatch.StartNew();
Console.WriteLine("Instantiated object");
}
public void ShowDuration()
{
Console.WriteLine("This instance of {0} has been in existence for {1}",
this, sw.Elapsed);
}
~ExampleClass()
{
Console.WriteLine("Finalizing object");
sw.Stop();
Console.WriteLine("This instance of {0} has been in existence for {1}",
this, sw.Elapsed);
}
}
public class Demo
{
public static void Main()
{
ExampleClass ex = new ExampleClass();
ex.ShowDuration();
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
当我使用visual studio和.net framework …
我使用Effort库作为模拟数据库,它有一些必须在程序集加载时运行的初始化代码.
我尝试在静态构造函数中添加此初始化代码,该构造函数通过基类构造函数从每个测试引用,但这不符合库的要求.
这里对类似问题的回答提到了一个AssemblyInitialize属性,但这不适用于xUnit - xUnit无法在程序集加载时运行代码.
我还在xUnit GitHub页面上询问过- 确实没有汇编级初始化程序.
如何在xUnit中运行我需要的初始化代码?