Supposons que vous écrivez une fonction pour vérifier si une page a été atteinte par l'URL appropriée. La page a un bout "canonique" - par exemple, alors qu'une page pourrait être atteinte à stackoverflow.com/questions/123, nous préférerions (pour des raisons de SEO) la rediriger vers stackoverflow.com/questions/123/how-do -i-move-the-tortue-in-logo - et la redirection réelle est contenue en toute sécurité dans sa propre méthode (par exemple, redirectPage ($ url)), mais comment tester correctement la fonction qui l'appelle?Tests unitaires avec effets secondaires?
Par exemple, prendre la fonction suivante:
function checkStub($questionId, $baseUrl, $stub) {
canonicalStub = model->getStub($questionId);
if ($stub != $canonicalStub) {
redirectPage($baseUrl . $canonicalStub);
}
}
Si vous deviez test unitaire la fonction checkStub(), ne serait pas la redirection obtenir de la manière?
Cela fait partie d'un problème plus vaste où certaines fonctions semblent devenir trop grandes et laisser le domaine des tests unitaires et dans le monde des tests d'intégration. Mon esprit pense immédiatement aux routeurs et aux contrôleurs comme ayant ce genre de problèmes, car les tester conduit nécessairement à la génération de pages plutôt que de se limiter à leur propre fonction.
Est-ce que j'échoue juste aux essais unitaires?
Ralentissez ... et repenser à ce que vous essayez vraiment tester ici ... Si vous supprimez le Redirect, le checkStub la méthode ne fait pas grand-chose donc je ne suis pas sûr du vrai test ici. Habituellement, vous testez les effets secondaires qu'une telle fonction provoque. – Gishu
@gishu: oui, c'est un exemple incroyablement imparfait issu d'un problème que j'ai résolu depuis ... le problème a été résolu, mais l'exemple (rediriger) est resté coincé dans ma tête.Focus sur la fin de la question - routeurs, contrôleurs - comme la vraie viande de la question. Comment puis-je tester des fonctions dont le but est en grande partie de «créer des choses» mais qui doivent encore être testées en raison de leur propre ordre interne et logique. Je vais m'évanouir maintenant et je vais probablement changer d'avis sur cette question dans la matinée. J'espère que vous pouvez voir mon intention maintenant (cela pourrait aider à savoir que je suis tout nouveau dans les tests unitaires). – AgentConundrum
Vous venez juste de dire que vous mélangez la logique avec la création d'objets, ce qui rend les tests unitaires difficiles. Pouvez-vous partager ces deux préoccupations? Si c'est le cas, écrire vos tests unitaires sera plutôt trivial. – strager