2012-03-07 96 views
0

我有一個靜態類。我可以修改它,並使其擴展接口\抽象類。如何抽象靜態類

它包含

  • 大量只讀和consts成員。
  • staic方法。

爲了使該代碼可檢驗的,我想

  1. 單獨給DTO和經理。
  2. 摘要每一個。但是如何做到這一點,因爲類是靜態的?
+0

你應該更詳細地描述你想要做什麼。你可以改變靜態類嗎? – 2012-03-07 21:23:48

+2

爲什麼你的靜態代碼*無法測試*?將它作爲系統其他部分的依賴關係進行模擬/存儲可能很困難,但靜態成員本身可以像其他任何東西一樣進行測試。 – 2012-03-07 21:27:12

+0

給我們一些代碼來說明你想測試什麼。靜態類不難測試任何其他類型,所以我們只是猜測你的問題是什麼。 – 2012-03-07 21:42:59

回答

1

一種選擇是將使用靜態類轉換爲常規類。在你的主應用程序中添加一個單例,以便從任何地方使用同一個實例,因此singletone有效地將實例轉換爲全局實例。但在測試中,您可以按需創建實例。

+0

如果我不選擇singelton。如何突出靜態字段? – 2012-03-07 21:27:02

+0

您無法抽象出一個字段,您需要將其更改爲屬性。 – 2012-03-07 22:28:02

2

我認爲有兩件事情靜態類是良好的:

  1. 提供全局函數/算法(即不應該依賴於狀態 - 又名純函數)
  2. 佔全球數據

如果你在那裏模擬這些方法,使它們是純的,你可以馬上測試它們。另一方面,全局數據(您的常量和只讀成員)不需要進行測試,因爲它們應該由所述方法生成。因此,如果你的靜態方法使用來自你的類的全局數據,只是重構它們以將這些數據作爲參數包含在方法中,那麼用簡單的包裝器重載這些數據以提供全局數據並測試新的 - 現在是純粹的函數。注意在你的方法中包含諸如數據庫數據或系統時間(DateTime.Now)和類似的副作用數據。

如果參數列表將大的重構方法轉換爲一個類,其中一些/大部分參數被封裝到新的類字段中 - 請始終記住SOLID(單個責任)中的S - 只將所有內容混淆到「MyStaticGlobals」 -class/singelton,如果你分開測試零件。