PHPUnit:在没有具体方法的情况下测试抽象类

时间:2010-09-15 08:48:58

标签: php unit-testing phpunit

我关注抽象类,并对如何为此编写单元测试提出疑问。这实际上需要吗?由于这个班级没有任何具体的方法。

<?php

abstract class PickupPoint_Abstract {
    public function __construct($client) {}
    public function getPickupPoints($countryCode, $postalCode, $city) {}
    public function getPickupPointDetails($pickupPointId, $countryCode) {} }

2 个答案:

答案 0 :(得分:4)

由于您无法测试任何预期的行为,因此似乎很难进行任何有意义的测试。


如果您至少有一个具体的方法,您可以模拟该类并测试一个方法但没有任何代码进行测试我会说你很高兴。

(我想你总是知道,但为了完成:See Example 11.8 for getMockForAbstractClass on the phpunit site


即使如此,我也很好奇为什么你没有像这样将方法定义为抽象:

<?php
abstract class PickupPoint_Abstract {
    abstract public function __construct($client);
    abstract public function getPickupPoints($countryCode, $postalCode, $city);
    abstract public function getPickupPointDetails($pickupPointId, $countryCode); }

因为只有这时解释器才会强制所有方法都在子类中实现。

答案 1 :(得分:2)

不,你不需要测试它,因为没有什么可以测试的。

顺便说一句抽象方法应该像

一样定义
<?php
abstract class PickupPoint_Abstract {
    public function __construct($client) {}
    abstract public function getPickupPoints($countryCode, $postalCode, $city);
    abstract public function getPickupPointDetails($pickupPointId, $countryCode);
}
?>

你制作的钩子可能没有被覆盖。

请参阅Class Abstraction