2012-11-13 135 views
1

我想單元測試一個讀取功耗信息的類。 我有我給你從System.Windows.SystemInformation.PowerStatus值的私有隻讀變量,我可以使用反射來改變這個沒有問題,但...可以覆蓋我無法繼承的類的屬性嗎?

System.Windows.PowerStatus不具有公共構造和不會讓我繼承它來派生一個testPowerStatus類,我可以使用我的測試。

我想能夠覆蓋BatteryLifePercent和BatteryLifeRemaining屬性的getter,所以我可以測試當這些值爲特定值時發生的正確行爲。

有反正我可以做到這一點嗎?或者這是不可能的?

+2

查看http://stackoverflow.com/questions/6484/how-do-you-mock-a-sealed-class –

+1

也可以查看構圖設計模式http://en.wikipedia.org/wiki/Composite_pattern – series0ne

+0

謝謝你的答案。我正在爲密封類創建一個包裝。謝謝! – jtwigg

回答

1

這樣做的「正確」方法是創建一個抽象層。您應該創建一個IPowerInfoProvider接口,然後創建一個實現測試接口的存根,另一個實現提供實際的電源信息。

您的BL應該只知道IPowerInfoProvider接口。

+0

我已經創建了一個接口,然後是一個實現該接口的類,並返回系統信息和一個返回模擬信息的類。謝謝 – jtwigg

+0

@jtwigg不客氣!感謝標記爲答案! =) – LMB

1

我寧願製作一個接口IPowerStatus,它具有您需要的屬性和方法。比我會創建包裝類System.Windows.PowerStatus實現IPowerStatus和recing方法和getters/setters保持對象。而對於單元測試,你可以使用一些模擬實現你的IPowerStatus。

2

你實際上不需要測試一個例程,它將一個從System.Windows.SystemInformation.PowerStatus中賦值給一個私有變量,嘗試提取你在一個單獨的例程中測試的邏輯,例如一個具有號碼作爲模擬有關信息的參數。

看看PowerStatus公開的成員,他們都是int,float或enums,試着將這些作爲參數提供給你的單位,然後再更容易測試。

相關問題