可以将nunit配置为每个fixture(或每个测试)删除app域

时间:2010-02-25 15:47:45

标签: .net nunit

在测试单例类时,我们需要单个实例在每次测试后“消失”。有没有办法配置nunit在每次测试后重新创建测试应用程序域,或至少在每次测试后?

3 个答案:

答案 0 :(得分:4)

您可以提供在通过条件方法进行测试时更新单例实例的方法。

//  CUT
public sealed class Singleton{

    private static Singleton _instance = new Singleton();

    private Singleton()
    {
         //  construct.
    }

    public static Singleton Instance{
        get{
            return _instance;
        }
    }

    [Conditional ("DEBUG")]
    public static void FreshInstance (){
          _instance = new Singleton();
    }
}


//  NUnit
[TestFixture]
public class SingletonTests{

    [SetUp]
    public void SetUp(){
        Singleton.FreshInstance();
    }
}

答案 1 :(得分:1)

我需要做同样的事情,所以我创建了一个基本上接受当前测试的库,并在新的AppDomain中重新执行它。这是一个名为NUnit.ApplicationDomain的nuget包,是open source

示例代码:

[Test, RunInApplicationDomain]
public void Method()
{
  Console.WriteLine("I'm in a different AppDomain")
}

答案 2 :(得分:0)

我想我在这里错过了一些拉尔夫。只是为了我自己的利益,你能解释一下为什么向你的Test Class添加具有以下属性的方法,删除并重新创建你的实例对你不起作用吗?

为方法添加这些属性应该使它们在每次测试之前/之后运行。

[SetUp]

[TearDown] 

为方法添加这些属性应该使它们在灯具之前/之后运行。

[TestFixtureSetUp]

[TestFixtureTearDown]

使用具有这些属性的方法是否有理由无法在测试之间创建和销毁您的域?