2012-03-09 56 views
11

我似乎遇到了問題,我們使用的應用程序使用Ninject內核,並且包含與WCF調用(用戶名,令牌...的內容收集的特定配置... )。使用NUnit在不同應用程序域中運行單元測試

基於特定的配置,用戶被賦予應用程序權限,這通過Ninject內核中的特定實例進行屏蔽。我們不能僅僅重新構建Ninject內核,我們想要做的是運行幾個Nunit測試,但是在獨立的應用程序域中運行它們中的每一個(每次使用不同的設置重新創建內核)。

我只找到方法,在不同的應用程序域整個測試項目,但每次測試不考。

有沒有辦法解決這個問題?

不幸的是,Ninject配置不在我們這邊,我們必須以這種方式'生活'。

回答

5

我不認爲這是解決這個問題,而不NUnit的代碼重新編寫部分的方式。自從我進入NUnit代碼以來已經有一段時間了,但我很確定主要的應用程序域加載部分沒有改變。

NUnit的通常使用兩個應用程序域。 NUnit運行時創建的默認值,另一個用於加載測試程序集及其引用的程序集。這樣做的主要原因是允許卸載測試組件。你不能卸載一個DLL,但你可以卸載一個AppDomain。

您可以在每個測試中運行一次NUnit並在命令行上通過測試,但這很醜陋,我不確定它會有幫助。

也可以在NUnit 2.6中利用Action Attributes,但是你要在這裏做很多工作。

您可能也可以在您的設置方法中創建一個新的應用程序域,並在每個測試中調用它。尷尬,但可能。

對不起,我沒有一個更完整的答案。

1

我不完全確定你的問題。但是,您似乎需要某種自定義實現。您是否考慮過自定義測試屬性?那麼可能會配置每個屬性在不同的應用程序域中運行?我只是想出一些想法,但可能有更好的方法來做到這一點。

+1

的xUnit在默認情況下做到這一點? – 2012-06-13 14:08:31

25

我需要做完全相同的事情,所以我創建了一個基本上接受當前測試並在新的AppDomain中重新執行的庫。這是一個名爲NUnit.ApplicationDomain的nuget包,並且是open source

示例代碼:

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