对使用静态框架进行单元测试感兴趣,类似于FuelPHP,但不知道从哪里开始

时间:2011-12-01 16:32:09

标签: php unit-testing static

正如标题所说,我正在尝试理解如何进行单元测试(或者可能是其他类型的测试)一个类似于FuelPHP的框架,您可以利用静态调用来设置和访问所有内容。

这导致代码如下:

class Appointment {
  public static function updateStartTime($binds) {
     $query = "UPDATE appointment SET start_time = :start_time 
       WHERE appointment_id = :appointment_id";
     return DB::update($query, $binds);
  }
}

您最终得到的控制器代码如下:

$result = Appointment::updateStartTime(array(
  'start_time' => '10:00 am', 
  'appointment_id' => 10
));

因此,为了测试Appointment :: updateStartTime方法,我需要能够为它提供一个假的DB :: update方法,但我不知道从哪里开始。

我知道我可以在测试套件中包含一个模拟类:

class DB {
  public static function update($params) { return 'success'; }
}

但这似乎很乏味。有没有更好的方法来添加测试覆盖率到我的框架,同时仍然使用这种编码风格?

1 个答案:

答案 0 :(得分:2)

Static Methods are Death to Testability。 PHPUnit为静态类函数提供了一些模拟,但这仅适用于某些条件(只能在类本身内部,类必须使用后期静态绑定,请参阅Stubbing and Mocking Static Methods)。

所以我会说:不要测试框架,这应该在框架社区内完成。相反,不要在自己的代码中使用静态类,这样就可以对自己的代码进行单元测试。