我知道三种方法:
单位测试概念的最佳方法是什么?
答案 0 :(得分:4)
我只会为从抽象类派生的具体类编写测试。如果您发现它们正在重复测试,请编写一个超类并在那里移动重复的测试,或者使用getMockForAbstract
类进行测试。
所以如果你有这样的事情:
abstract class Employee
{
protected $name;
public function getName()
{
return $this->name;
}
abstract function doWork();
…
}
class Mechanic extends Employee
{
public function doWork()
{
return // specific to Mechanic
}
}
class Engineer extends Employee
{
public function doWork()
{
return // specific to Engineer
}
}
我有一个测试类,用于测试他们的doWork
实现的Mechanic和Engineer,但不测试他们的getName
功能,因为它是由抽象类继承的。为此,我会编写一个自定义类或使用getMockForAbstractClass
,如PHPUnit手册中的示例所示:
答案 1 :(得分:1)
这取决于抽象类的功能。当抽象类只是为了提供一些模板方法的基本样板文件时,我将测试限制在具体的子类中。
当抽象类大部分完成时,我将在与测试用例相同的文件中为测试创建一个具体的子类,或者我将使用mock。请注意,getMockForAbstractClass()
只是一个帮助程序,可以为您找到所有抽象方法。没有什么可以阻止你宣布所有抽象方法加上getMock()
的具体方法。出于这个原因,我在基本测试用例中覆盖getMock()
以在调用父项之前合并所有抽象方法。