【问题标题】:In what cases is a method testable在什么情况下方法是可测试的
【发布时间】:2013-05-12 17:13:29
【问题描述】:

我想我理解为什么使用其他静态方法的方法难以测试。当我说测试时,我指的是单元测试。

举个例子:

类富 { 受保护的$objA; 公共函数 m1() { $objA = 新 A(); $objA->show(); } 公共函数 m2() { 一场表演(); } 公共函数 m3() { $this->objA->show(); } 公共函数 m4($objA) { $objA->show(); } }
  • m1 容易测试吗?我认为不是因为您无法模拟该对象。
  • m2 是静态使测试变得困难的情况吗?
  • m3 是一种很好的可测试方法吗?
  • m4 是一种很好的可测试方法吗?

我做对了吗?

【问题讨论】:

    标签: php unit-testing


    【解决方案1】:

    M1 并不完美,因为您在方法本身中有对类的具体引用,因此您是正确的,因为您无法模拟它。在这种情况下,您应该使用依赖注入将对象引用传递给方法。

    M2 的情况几乎相同,因为它使用的是具体引用,但正如您所指出的,它使用的是静态方法。静态方法很难模拟,因为无法创建定义静态方法的接口(我说的是 .Net 背景,我不确定您是否可以在 PHP 中接口静态方法,但我对此表示怀疑)。

    M3,看起来您正在使用属性注入,在这种情况下,是的,这是一个易于模拟的测试,因为对象是在类本身之外实例化并传递给它的。

    M4 与 M3 相同,因为依赖注入以方法参数的形式出现。

    理想情况下,依赖注入应该在类级别完成,通过使用属性或构造函数参数。构造函数参数通常被视为首选方法,因为至少从我的角度来看,属性注入有点松散,而构造函数注入则迫使您创建一个具有它所需的每个依赖项的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-07
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      相关资源
      最近更新 更多