具体实例方法与静态测试方法一样糟糕,对吧?

时间:2011-05-16 04:40:50

标签: testing methods static instance concrete

如果方法A()调用静态方法B(),这很糟糕,因为两者是紧密耦合的,对吗?

但是,如果不是调用B(),而是A()调用某个具体类的非静态方法C(),那么测试同样不好,对吗?因为现在A()与拥有C()的具体类相关联。

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

我说得对吗?静态方法是否有其他原因导致测试不好?

2 个答案:

答案 0 :(得分:2)

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

第二个场景可能不那么“糟糕”,因为根据你获得拥有C()的类的实例的方式,你可能能够将该对象换成另一个(比如子类)。

第三种情况通常是“最佳”,因为它允许您更轻松地更改A()的实现,但只有在没有提供A()的具体类的硬编码结构时才会这样。 (即,如果依赖注入实际上是使用,则仅为tru。)

答案 1 :(得分:0)

这取决于语言。例如,在Java之类的语言中,调用具体类上的实例方法对于测试来说并不坏,因为可以生成该具体类的代理实例,从而允许有效地拦截(通常,模拟)调用。实际上,许多框架使用此代理工具在用户代码之前/之后注入自己的代码,以便提供依赖注入和AOP支持等功能。