J'ai une fonction qui enregistre des photos (stockées dans la base de données, apporte l'option utilisateur de sauvegarder dans un répertoire) à un répertoire donné.NOW, cela ne fonctionnait pas correctement. Je viens de le corriger. Maintenant, dois-je écrire un test d'unité ou test d'intégration pour la fonction? P>
5 Réponses :
Les tests d'intégration et les tests d'unité ont des domaines et des objectifs différents: P>
Pour une fonction SINGE, vous ne pouvez avoir qu'un test unitaire et vous devriez. Mais vous pouvez également avoir un test d'intégration qui montre que lorsque l'utilisateur appuie sur un bouton certain, une photo est écrite dans le répertoire et peut également être ouverte dans le programme. P>
Certaines personnes appelleraient un test pour un test d'intégration DAO; D'autres diraient que c'est un test unitaire. p>
Quoi que vous appelle cela, je dirais que vous devriez avoir un test d'unité pour toutes les fonctionnalités DAO et un test d'intégration pour le comportement frontal à dos incorporé dans le cas d'utilisation indiquant «Donnez à l'utilisateur l'option de sauvegarder. au système de fichiers. " J'aurais des tests d'intégration pour les deux scénarios, car il semble que les deux sont possibles dans votre système. P>
Pour votre cas, vous souhaitez écrire un test d'intégration strong> pour couvrir le scénario que vous mentionnez. J'ai un Poste sur ce sujet . Cependant, voici une version résumée spécifique à votre question: p>
Dans son livre L'art du test unitaire em>, Roy Osherove décrit un principe clé selon lequel un test unitaire doit être "digne de confiance". Sur la surface, cela semble assez évident. Cependant, ce sous-jacent met en évidence certaines des différences essentielles entre un test de l'unité et un test d'intégration. P>
Avec un test de confiance, vous devez pouvoir faire confiance aux résultats 100% du temps. Si le test échoue, vous voulez être certain que le code est cassé et doit être corrigé. Vous ne devriez pas avoir à demander des choses comme "était la base de données?" "," Connexion String OK? "," La procédure stockée a-t-elle été modifiée? ". En posant ces questions, cela montre que vous ne pouvez pas faire confiance aux résultats et vous avez probablement un "test de l'unité" mal conçu. P>
Comme votre scénario décrit une situation avec plusieurs dépendances similaires, vous souhaitez le couvrir avec un test d'intégration. Encore une fois, pour plus de détails, voir Mon message complet ici aussi. P>
bonne chance! p>
Merci pour votre commentaire. Le concept de Roy m'a certainement aidé aussi. Bienvenue sur Stackoverflow aussi!
Il suffit de lire cette réponse et cela répond totalement à mes questions. Je suis un peu nouveau dans le développement "professionnel", et cela m'a donné une meilleure idée de quels tests d'intégration sont, ce qui était ce que je n'ai pas bien compris. Merci!
Je pense que cela dépend de la source de votre problème. Si la fonction elle-même peut avoir des problèmes dans différents scénarios, vous pouvez avoir des tests d'unités pour tester ces scénarios sur votre fonction. Si l'intégration de votre fonction et d'autres parties de votre programme peut provoquer des problèmes que vous devriez penser à un test d'intégration. Parfois, une fonction comme la vôtre peut avoir besoin de ressources externes pour faire son travail, ce n'est pas une mauvaise idée d'avoir des tests unitaires pour voir ce qui se passera si certaines de ces ressources ne sont pas disponibles p>
Tests unitaires dans une certaine mesure contribuent également au premier objectif. De plus, il a quelques avantages: P>
Pour cette raison, des tests d'unités sont généralement plus populaires que des tests d'intégration. Cependant, vous ne pouvez vraiment pas faire sans tests d'intégration. Les tests d'intégration doivent être la pierre angulaire utilisée pour accepter votre logiciel. Avoir des tests d'unités seulement prouve que vous avez un tas de choses qui font quelque chose em>. Un test d'intégration prouve que vous avez logiciel de travail em>. P>
Je préfère écrire des tests d'unité pour des classes simples et (parfois) des outils d'enregistrement pour le test d'intégration.