7
votes

Devrais-je écrire un test d'intégration ou un test d'unité?

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?


1 commentaires

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.


5 Réponses :


8
votes

Les tests d'intégration et les tests d'unité ont des domaines et des objectifs différents:

  • Tests unitaires Testez de petits morceaux de code (comme une fonction) isolément du reste du programme, couvrant idéalement tous les cas de bord possibles (comme exceptions, paramètres NULL, etc.)
  • Les tests d'intégration testent une application complète d'un point de vue de cas d'utilisation. Ils ne peuvent jamais couvrir tous les cas de bord, mais ils peuvent attraper des problèmes avec l'interaction entre les parties du code et le code de colle qui les joignent ensemble quels tests unitaires manquent souvent

    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.


0 commentaires

1
votes

Certaines personnes appelleraient un test pour un test d'intégration DAO; D'autres diraient que c'est un test unitaire.

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.


0 commentaires

18
votes

Pour votre cas, vous souhaitez écrire un test d'intégration 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:

Dans son livre L'art du test unitaire , 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.

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.

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.

bonne chance!


2 commentaires

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!



1
votes

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


0 commentaires

7
votes
  • Les tests d'intégration vous aident à valider si votre logiciel est fonctionne correctement .
  • Les tests unitaires vous aident à trouver pourquoi votre logiciel est rupture .

    Tests unitaires dans une certaine mesure contribuent également au premier objectif. De plus, il a quelques avantages:

    • Il est généralement moins cher à écrire et exécuter un test unitaire avec une portée beaucoup plus petite.
    • Il est plus facile d'obtenir une couverture pour l'explosion combinatoire des états de vos composants utilisant des tests d'unités que d'un test d'intégration. Dites que vous avez une configuration impliquant trois composants. Chacun d'entre eux a 3 états différents. Ensuite, l'intégration Test de l'ensemble de la configuration impliquerait la vérification 3 * 3 * 3 = 27 conditions. Test de l'unité Les composants individuels nécessiteraient des tests 3 + 3 + 3 = 9 conditions. (Ceci est trop simplifié, mais vous saurez-vous voir le point.)

      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 . Un test d'intégration prouve que vous avez logiciel de travail .


0 commentaires