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_Mailclasse 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_Mailsoit 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 Loggerqui 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_Mailclasse. De plus, je viole le principe de l' inversion de dépendance car ma Loggerclasse dépend maintenant de la concrétion et non de l'abstraction.
Maintenant, comment puis-je tester Loggerde 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