如何抽象静态类

时间:2012-03-07 21:21:34

标签: c# unit-testing

我有一个静态类。我可以修改它并使其扩展interface \ abstract class。

它包含

  • 很多只读和会员。
  • staic methods。

为了使这段代码可以测试,我想

  1. 将其分为DTO和经理。
  2. 摘要每一个。但是如果这些类是静态的呢?

2 个答案:

答案 0 :(得分:2)

在我看来,静态类有两个好处:

  1. 提供全局函数/算法(不应该依赖于状态 - a.k.a纯函数)
  2. 持有全球数据
  3. 如果你在那里建模方法以便它们是纯净的,你可以立即测试它们。另一方面,全局数据(您的常量和只读成员)不需要测试,因为它们应该由所述方法生成。

    因此,如果您的静态方法使用类中的全局数据,只需重构它们以将此数据作为参数包含到方法中,使用简单包装器重载这些数据,为全局数据提供数据并测试新的 - 现在是纯函数。注意将数据库数据或系统时间(DateTime.Now)以及类似的副作用数据包含在您的方法中。

    如果参数列表重大,则将该方法转换为一个类,其中一些/大多数参数被封装到新的类字段中 - 始终记住SOLID中的S(单一责任) - 只将所有内容混为“MyStaticGlobals” - 如果你在分离时测试零件,则为class / singelton。

答案 1 :(得分:1)

一种选择是将已使用的静态类转换为常规类。在主应用程序中,您添加一个单例,以便从任何地方使用相同的实例,因此单例有效地将实例转换为全局。但在测试中,您可以按需创建实例。