C# 如何抽象静态类

C# 如何抽象静态类,c#,unit-testing,C#,Unit Testing,我有一节静态课。我可以修改它并使其扩展接口\抽象类 它包含 很多只读和常量成员 staic方法 为了使这段代码可测试,我想 将其分离给DTO和经理 把它们都抽象出来。但是由于类是静态的,如何做到这一点呢 一个选项是将使用的静态类转换为常规类。在您的主应用程序中,您添加了一个单例,以便在任何地方都使用相同的实例,因此单例可以有效地将实例转换为全局实例。但在测试中,您可以根据需要创建实例。一个选项是将使用的静态类转换为常规类。在您的主应用程序中,您添加了一个单例,以便在任何地方都使用相同的实例,

我有一节静态课。我可以修改它并使其扩展接口\抽象类

它包含

  • 很多只读和常量成员
  • staic方法
为了使这段代码可测试,我想

  • 将其分离给DTO和经理
  • 把它们都抽象出来。但是由于类是静态的,如何做到这一点呢

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

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

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

  • 提供全局函数/算法(不应依赖于状态-也称为纯函数)
  • 保存全球数据
  • 如果您对其中的方法进行建模,使它们是纯的,那么您可以立即测试它们。另一方面,全局数据(常量和只读成员)不需要进行测试,因为它们应该由上述方法生成

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


    如果parameterlist开始将该方法重构为一个类,其中一些/大部分参数被封装到新的类字段中-请始终记住S from SOLID(单一责任)-只会将所有内容杂乱无章地放入“MyStaticGlobals”中-如果单独测试部件,则可以使用class/singleton。在我看来,静态类有两个好处:

  • 提供全局函数/算法(不应依赖于状态-也称为纯函数)
  • 保存全球数据
  • 如果您对其中的方法进行建模,使它们是纯的,那么您可以立即测试它们。另一方面,全局数据(常量和只读成员)不需要进行测试,因为它们应该由上述方法生成

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


    如果parameterlist开始将该方法重构为一个类,其中一些/大部分参数被封装到新的类字段中-请始终记住S from SOLID(单一责任)-只会将所有内容杂乱无章地放入“MyStaticGlobals”中-如果您单独测试零件,请单击class/singleton。

    您应该更详细地描述您要执行的操作。你能改变静态类吗?为什么你的静态代码是不稳定的?在系统的其他部分,可能很难将其模拟/存根为依赖项,但静态成员和其他任何东西一样都是可测试的。给我们一些代码来说明您想要测试什么。静态类不难测试,所以我们只是猜测你的问题是什么。你应该更详细地描述你想做什么。你能改变静态类吗?为什么你的静态代码是不稳定的?在系统的其他部分,可能很难将其模拟/存根为依赖项,但静态成员和其他任何东西一样都是可测试的。给我们一些代码来说明您想要测试什么。静态类不难测试,所以我们只是猜测你的问题是什么。如果我不选择singelton。如何抽象静态字段?您不能抽象字段,您需要将其更改为属性。如果我不选择singelton。如何抽象静态字段?不能抽象字段,需要将其更改为属性。