2010-02-25 35 views
5

在测试单例类时,我们需要单个实例在每次测试后“离开”。有没有一种方法可以在每次测试后配置nunit重新创建测试应用程序域,或者至少在每次测试之后重新创建测试应用程序域?可以将nunit配置为删除每个灯具(或每个测试)的应用程序域

+0

如果单的设置是如此复杂,它需要在每次调用时进行测试,可以抑止创建逻辑到一个方法,然后测试方法呢? – roufamatic 2010-02-25 17:59:01

回答

0

我想我在这里失去了一些东西拉尔夫。为了我自己的利益,你能解释为什么添加具有下列属性的方法到你的测试类中去掉并重新创建你的实例不适合你吗?

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

[设置]

[TearDown中]

添加这些属性的方法应该让他们在灯具前后运行/。

[TestFixtureSetUp]

[TestFixtureTearDown]

有为什么使用这些属性的方法不能创建和销毁测试之间的域中的原因是什么?

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

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

示例代码:

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