【问题标题】:Concrete Instance Methods Are Just as Bad as Static Methods for Testing, Right?具体实例方法和静态测试方法一样糟糕,对吧?
【发布时间】:2011-05-16 04:40:49
【问题描述】:

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

但是,如果不是调用B(),而是A() 调用某个具体类的非静态方法C(),这同样不利于测试,对吗?因为现在A() 与拥有C() 的具体类耦合。

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

我说的对吗?静态方法不利于测试还有其他原因吗?

【问题讨论】:

    标签: testing methods static instance concrete


    【解决方案1】:

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

    第二种情况可能没有那么“糟糕”,因为根据您获取拥有C() 的类的实例的方式,您可能能够将该对象交换为另一个对象(例如子类)。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 2012-08-13
        • 2012-11-12
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多