2012-03-07 93 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,如果你分开测试零件。