Unit testing 除了测试之外,为什么静态方法不好

Unit testing 除了测试之外,为什么静态方法不好,unit-testing,static,Unit Testing,Static,很多时候,我听说单例是一种不好的实践,静态方法是一种不好的实践,我所能看到的原因是很难测试 但我确实认为,如果一个操作可以在不实例化类的情况下完成,那么有时候它真的很好 编辑:仅仅因为测试,任何人都会发现私有方法也不好,它们不能被测试。例如,这是一个关于语义和属性的问题 静态方法本身并不坏,而且很难测试。糟糕的是,为了避免创建新实例而使用静态方法会让其他程序员感到困惑 如果该方法与类本身相关,而不是像工厂方法那样与单个实例相关,那么无论如何都要使用静态方法。但是,如果方法在语义上属于单个实例,则

很多时候,我听说单例是一种不好的实践,静态方法是一种不好的实践,我所能看到的原因是很难测试

但我确实认为,如果一个操作可以在不实例化类的情况下完成,那么有时候它真的很好


编辑:仅仅因为测试,任何人都会发现私有方法也不好,它们不能被测试。例如,这是一个关于语义和属性的问题

静态方法本身并不坏,而且很难测试。糟糕的是,为了避免创建新实例而使用静态方法会让其他程序员感到困惑


如果该方法与类本身相关,而不是像工厂方法那样与单个实例相关,那么无论如何都要使用静态方法。但是,如果方法在语义上属于单个实例,则使用非静态方法。

除了测试问题外,静态方法通常不受欢迎,原因与全局变量大致相同:

静态方法与特定的类实例无关,因此并不总是线程安全的。 使用大量静力学方法的系统通常不能很好地伸缩。 由于混合调用类的静态方法和类实例的成员而导致的混淆可能会导致维护问题。
不能存根包含它的类。这意味着使用该静态方法的每段代码都将按原样实现。模拟不像实例方法那么简单。再次测试:模拟,存根。找到一个与测试无关的原因:您对私有方法的论证是不相关的,因为单元测试首先不应该测试实现细节,其中包括私有方法。是的,如果您不想测试您的代码,那么您可以使用许多静态方法。你真的想走这条路吗?不,我不想走,但我的看法是:这些语言元素已经好了几十年了——然后有人来了,说他们不好,因为testSingleton不是坏习惯。那里这是我的意见。我提供的理由和一些身份不明的人在没有背景或支持的情况下发表声明的理由一样多。