Je ne rédigerais que des tests pour des classes concrètes dérivées de la classe abstraite. Si vous trouvez que vous dupliquez des tests parmi eux, écrivez une superclasse et déplacez les tests dupliqués là ou utilisez la classe getMockForAbstract
pour ceux-ci.
Donc, si vous aviez quelque chose comme ceci:
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
}
}
j'aurais une classe de test pour tester mécanicien et ingénieur leur mise en œuvre doWork
, mais pas leur fonctionnalité getName
, parce que cela est héritée par la classe abstraite. Pour cela, j'écrire une classe puis personnalisée ou utiliser getMockForAbstractClass
, comme le montre l'exemple dans le Manuel de PHPUnit:
Gordons répond à peu près résume mon point aussi, donc je vais juste ajouter un commentaire. Je teste tout dans la classe de base qui ne repose pas sur les méthodes abstraites à exister dans la classe abstraite et le reste dans les classes de base. Alors que l'on pourrait argumenter qu'il n'est pas nécessaire de tester la classe de base du tout et tester uniquement les classes dérivées (peut-être avec une classe de test de base;)?) La plupart du temps ne vaut pas le tracas. Donc j'irais 4 "Test toutes les sous-classes et les fonctions incluses dans le baseclass seulement une fois" – edorian