Je fais des tests unitaires et dans l'une de mes classes, je dois envoyer un courrier à partir d'une des méthodes, donc en utilisant l'injection de constructeur j'injecte une instance de Zend_Mail
classe qui est dans le framework Zend.
Maintenant, certaines personnes soutiennent que si une bibliothèque est suffisamment stable et ne change pas souvent, il n'est pas nécessaire de la boucler. Donc, en supposant que cela Zend_Mail
soit stable et ne changera pas et qu'il correspond entièrement à mes besoins, je n'aurai pas besoin d'un wrapper pour cela.
Jetez maintenant un œil à ma classe Logger
qui dépend de Zend_Mail
:
class Logger{
private $mailer;
function __construct(Zend_Mail $mail){
$this->mail=$mail;
}
function toBeTestedFunction(){
//Some code
$this->mail->setTo('some value');
$this->mail->setSubject('some value');
$this->mail->setBody('some value');
$this->mail->send();
//Some
}
}
Cependant, les tests unitaires exigent que je teste un composant à la fois, donc je dois me moquer de la Zend_Mail
classe. De plus, je viole le principe de l' inversion de dépendance car ma Logger
classe dépend maintenant de la concrétion et non de l'abstraction.
Maintenant, comment puis-je tester Logger
de manière isolée sans envelopper Zend_Mail
?!
Le code est en PHP, mais les réponses ne doivent pas nécessairement l'être. Il s'agit plus d'un problème de conception que d'une fonctionnalité spécifique à une langue