2016-04-04 13 views
2

我傳遞一個非靜態串入的MessageQueue:創造更多的可測試代碼,同時避免靜態/非靜態字段初始發行

public virtual MessageQueue MessageQueue { get; } = new MessageQueue(ConfigHelper.QLocation); 

QLocation是非靜態的;但是,MessageQueue需要一個靜態參數。

我得到這個異常:

不能在靜態情況下

ConfigHelper類訪問非靜態場是我的配置文件值的包裝。我可以使ConfigHelper類爲靜態;然而,這會使測試更加困難。

有沒有辦法處理這個問題,同時仍然保持代碼的可測試性?

回答

5

您正在嘗試以靜態方式(ConfigHelper.QLocation)使用QLocation,同時它是一個非靜態申請(爲你寫...)

試試這個:

.... = new MessageQueue(new ConfigHelper().QLocation); 

這我會刪除錯誤。

IMO,您應該通過此CUT(待測試類)C'tor注入MessageQueue。你的課程對MessageQueue有依賴性。 如果你不想注入MessageQueue我提供你注入連接字符串,而不是配置。

+0

謝謝!想知道爲什麼我不能像在問題中一樣在類的內部使用c#6.0語法來做到這一點? –

+0

爲什麼配置幫助後必須使用括號 –

+0

問題不在於C#6語法。問題是這樣的;你正試圖使用​​靜態方法的語法來調用非靜態方法(屬性是編寫getter方法的語法糖)。在下面的代碼片段'new ConfigHelper()。QLocation'中,我創建了一個'ConfigHelper'的新實例,然後我調用實例屬性'QLocation'。我使用帶'new'關鍵字的圓括號來調用C'tor類。 –