2009-07-27 45 views
0

我有一個靜態類,它表示我想使用Visual Studio 2008的內置單元測試框架進行單元測試的連接池。靜態類有一些常量,就像允許的最大連接數一樣。我想爲我的單元測試減少這個值,所以我不必爲了達到測試條件而打開很多連接(特別是達到最大允許連接時的代碼)。有沒有一種方法可以在單元測試中編輯這個常量?這對我來說似乎不可能。在C#中爲單元測試調整靜態類中的常量

我的一個解決方案是編寫另一種訪問要測試代碼的方法,一種將'最大允許連接'作爲參數。這看起來有點骯髒,因爲它修改了我想測試的代碼,即使只是稍微;然而,有沒有更好的選擇?下面是一些我的代碼,以供參考:

internal static class ConnectionPool<T> where T : Connection, new() 
{ 
    private const int MAX_OBJECTS = 25; 
    private static int _totalConnections; 

    internal static T getConnection(bool testMode) 
    { 
     if (_totalConnections >= MAX_OBJECTS) 
     { 
      // Here's the code I want to test 
     } 
    } 
} 

回答

0

在我看來,代碼被測試的條件有兩個部分:常量MAX_OBJECTS就是其中之一,但也有_totalConnections。使用訪問器類(Visual Studio爲我生成的訪問器類可以訪問ConnectionPool中的私有方法和變量),我可以修改_totalConnections的值,以使條件if (_totalConnections >= MAX_OBJECTS)爲真。換句話說,我將在單元測試中對靜態類進行說謊,這樣我就不必爲了符合條件而創建MAX_OBJECTS連接。

2

不,你不能修改常量,但是你可以用靜態只讀字段替換它,並使用反射修改字段。

2

在你做這件事之前,你應該問自己這個限制的重要性,如果改變它,你是否改變了測試的性質?換句話說,如果我將MAX_OBJECTS更改爲5,那麼我的代碼對於資源爭用或多線程問題導致的問題有更多或更少的影響嗎?您是否避免測試「真實」條件,因爲它太慢或太不切實際?如果是這樣,也許最好把它當作另一類單元測試。在我工作的地方,我們進行了一系列測試,這些測試對於時間而言至關重要,但代價很高。如果在任何時候都處於這種狀態,他們會不斷進行整合,因此我們創建了NUnit類別「Nightly」,超過一分鐘的測試必須通過Nightly承擔Category屬性。

+0

「你是不是避免測試」真實「的條件,因爲它太慢或太不切實際?」是。關於將單元測試分爲夜間v。任何時候的好建議。 – 2009-07-27 16:51:36

2

您可以從配置文件中獲取它,因此您可以擁有不同的測試值。