2008-12-30 75 views

回答

8

您可能有一些共享數據。檢查正在使用的類中的靜態成員變量,這意味着一個測試會設置一個導致後續測試失敗的值。

您還可以調試單元測試。根據您使用的框架,您應該能夠運行框架工具作爲調試啓動應用程序,將路徑作爲參數傳遞給編譯後的程序集。

2

很可能在一個測試中完成的某些修改/實例影響其他測試。這表明測試設計不佳並且缺乏適當的隔離。

0

按照其他響應。這聽起來像你有一個單身人士或全球變量導致交互。

2

每個人都可能是對的,有些共享日期正在測試之間修改。但請注意order of MS Test execution。簡單地暫停測試不是一個解決方案。每個測試都在獨立線程上的測試類的自己的實例中執行。

0

我已經使用過的其他單元測試框架非常努力地確保測試能夠產生相同的結果,無論測試是單獨運行還是作爲「全部運行」選項的一部分運行。目標是防止一種測試由於副作用而對另一種測試產生影響,例如(例如)在另一種測試不期望的配置中進行一次測試離開類的靜態狀態。 VS單元測試框架似乎沒有提供這種隔離。我有兩個建議來儘量減少問題所暗示的問題種類。首先,如果類具有狀態(除了靜態方法以外的任何其他類),則優先使用非靜態類。創建此類的單個實例,並讓它保留靜態類中保存的狀態信息。其次,如果你選擇使用靜態類的靜態類,則有一個靜態方法將靜態狀態設置爲'空'(例如,將所有靜態屬性設置爲空/零/等的方法)。在每個單元測試結束時調用它以撤銷測試對靜態造成的任何影響。 (這固然不夠優雅,但如果適度,可以行得通)。或者做我打算做的事 - 找到一個單元測試框架,在整個測試中提供隔離。

0

我也遇到了這個問題,雖然我的問題最終成爲線程問題。在我的情況下,我僞造了HttpContext對象,因爲測試依賴於它的存在。然而,我在ClassInitialize方法思考這個設置就可以使用各種方法象下面這樣:

[ClassInitialize] 
public static void ClassInit(TestContext testContext) 
{ 
    HttpContext.Current = new HttpContext(new HttpRequest(null, "http://tempuri.org", null), new HttpResponse(null)); 
} 

然而,事實證明,在每類測試方法在一個單獨的線程中運行。所以我不得不將這些代碼添加到每個依賴它來修復問題的測試方法中。

[TestMethod] 
public void TestMethod1() 
{ 
    HttpContext.Current = new HttpContext(new HttpRequest(null, "http://tempuri.org", null), new HttpResponse(null)); 
    ... 
} 

[TestMethod] 
public void TestMethod2() 
{ 
    HttpContext.Current = new HttpContext(new HttpRequest(null, "http://tempuri.org", null), new HttpResponse(null)); 
    ... 
} 

有關詳細信息,請參閱鏈接。 http://blogs.msdn.com/b/nnaderi/archive/2007/02/17/explaining-execution-order.aspx

相關問題