我可以覆盖我无法继承的类的属性吗?

时间:2012-11-13 11:16:44

标签: c# .net reflection properties

我想对读取电源信息的类进行单元测试。 我有一个私有的readonly变量,我从System.Windows.SystemInformation.PowerStatus分配一个值,我可以使用反射来改变这个没问题,但是......

System.Windows.PowerStatus没有公共构造函数,不会让我继承它来派生我可以用于测试的testPowerStatus类。

我希望能够覆盖BatteryLifePercent和BatteryLifeRemaining属性的getter,这样我就可以测试当这些是特定值时会发生正确的行为。

无论如何我能做到吗?或者这不可能吗?

3 个答案:

答案 0 :(得分:2)

您实际上不需要测试将System.Windows.SystemInformation.PowerStatus中的值分配给私有变量的例程,尝试在单独的例程中提取您需要测试的逻辑,例如具有数字的方法作为模拟重要信息的参数。

看看PowerStatus公开的成员,他们都是int,float或enums尝试将这些作为参数提供给你的单位,然后更容易测试。

答案 1 :(得分:1)

“正确”的方法是创建一个抽象层。您应该创建一个IPowerInfoProvider接口,然后创建一个实现测试接口的存根,以及另一个提供真实电源信息的实现。

你的BL应该只知道IPowerInfoProvider接口。

答案 2 :(得分:1)

我宁愿创建一个接口IPowerStatus,它具有您需要的属性和方法。我会为System.Windows.PowerStatus创建包装类,实现IPowerStatus并在keeped对象上重新调整方法和getter / setter。对于单元测试,您可以使用一些模拟实现您的IPowerStatus。