1

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

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

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

无论如何我可以做到这一点吗?或者这是不可能的?

4

3 回答 3

2

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

看一下PowerStatus公开的成员,它们都是 int、float 或 enum 尝试将这些作为参数提供给您的单元,这样更容易测试。

于 2012-11-13T11:28:46.617 回答
1

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

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

于 2012-11-13T11:27:11.733 回答
1

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

于 2012-11-13T11:28:29.770 回答