2011-05-16 69 views
1

如果方法A()调用静态方法B(),这是不好的,因为两者紧密耦合,是否正确?具体实例方法与静态方法一样不好测试,对吗?

但是,如果不是调用B(),A()称为某个具体类的非静态方法C(),那么这对测试同样不好,是否正确?因为现在A()被耦合到拥有C()的具体类别。

当使用接口(即,依赖注入)时,唯一的好方案发生,并且A()调用接口的方法。

我有权利吗?有没有其他原因静态方法不好测试?

回答

2

第一种情况是“坏”,因为它很难交换B()被调用。

第二种情况可能不是很糟糕,因为根据你如何获得拥有C()的类的实例,你可能可以将该对象换成另一个(比如子类)。

第三种情况通常是“最好的”,因为它允许您更容易地更改A()的实现,但只有在没有提供A()的具体类的硬编码构造时才是如此(即,只有在依赖注入实际上是使用)。

+0

谢谢澄清。 – 2011-05-16 05:08:57

0

这取决于语言。例如,在像Java这样的语言中调用具体类的实例方法对于测试根本没有任何坏处,因为可以生成该具体类的代理实例,从而可以有效地拦截(并且典型地嘲笑)调用。事实上,许多框架使用这个代理工具在用户代码之前/之后注入他们自己的代码,以提供依赖注入和AOP支持等功能。

相关问题