正如标题所说,我正在尝试理解如何进行单元测试(或者可能是其他类型的测试)一个类似于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'; }
}
但这似乎很乏味。有没有更好的方法来添加测试覆盖率到我的框架,同时仍然使用这种编码风格?
答案 0 :(得分:2)
Static Methods are Death to Testability。 PHPUnit为静态类函数提供了一些模拟,但这仅适用于某些条件(只能在类本身内部,类必须使用后期静态绑定,请参阅Stubbing and Mocking Static Methods)。
所以我会说:不要测试框架,这应该在框架社区内完成。相反,不要在自己的代码中使用静态类,这样就可以对自己的代码进行单元测试。