2010-02-25 31 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") 
} 
相關問題