如果方法 A()
调用静态方法 B()
,这很糟糕,因为两者紧密耦合,对吗?
但是,如果 A()
不是调用 B()
,而是调用某个具体类的非静态方法 C()
,这对测试同样不利,对吗?因为现在 A()
耦合到拥有 C()
的具体类。
唯一好的情况是使用接口(interface)(即依赖注入(inject)),并且 A()
调用接口(interface)的方法。
我说的对吗?静态方法不利于测试还有其他原因吗?
最佳答案
第一种情况“不好”,因为它很难交换正在调用的 B()
。
第二种情况可能没有那么“糟糕”,因为根据您获取拥有 C()
的类的实例的方式,您可能能够将该对象交换为另一个对象(说一个子类)。
第三种情况通常是“最好的”,因为它允许您更轻松地更改 A()
的实现,但这只有在没有提供具体类的硬编码构造的情况下才是正确的A()
(即只有在实际使用依赖注入(inject)时才为真)。
关于testing - 具体实例方法和静态测试方法一样糟糕,对吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013223/