2010-01-04 6 views
7

J'ai une fonction qui enregistre des photos (stockées dans la base de données, app donne l'option utilisateur pour enregistrer dans un répertoire) à un répertoire donné.Maintenant, cela ne fonctionnait pas correctement.Je viens de le corriger.Maintenant, dois-je écrire test unitaire ou test d'intégration pour la fonction?Dois-je écrire un test d'intégration ou un test unitaire?

+0

Je préfère écrire unittests pour les classes uniques et (parfois) les outils d'enregistrement pour le test d'intégration. – stacker

Répondre

17

Pour votre cas, vous voulez écrire un test d'intégration pour couvrir le scénario que vous avez mentionné. J'ai un full post on this topic. Cependant, voici une version résumée spécifique à votre question:

Dans son livre L'art des tests unitaires, Roy Osherove décrit un principe clé selon lequel un test unitaire doit être «digne de confiance». En surface, cela semble assez évident. Cependant, ce sous-jacent met en évidence certaines des différences clés entre un test unitaire et un test d'intégration. Avec un test fiable, 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 "La base de données était-elle en panne?", "La chaîne de connexion était-elle OK?", "La procédure stockée a-t-elle été modifiée?". En posant ces questions, cela montre que vous n'êtes pas capable de faire confiance aux résultats et que vous avez probablement un «test unitaire» mal conçu. Comme votre scénario décrit une situation avec des dépendances multiples similaires, vous voulez le couvrir avec un test d'intégration. Encore une fois, pour plus de détails, voir également my full post here.

Bonne chance!

+1

excellent point sur les «tests de confiance» –

+0

Merci pour votre commentaire. Le concept de Roy m'a certainement aidé aussi. Bienvenue sur stackoverflow aussi! –

+1

Il suffit de lire cette réponse, et il répond totalement à mes questions. Je suis un peu novice en matière de développement «professionnel», ce qui m'a permis de mieux comprendre les tests d'intégration, ce que je n'ai pas bien compris. Je vous remercie! –

8

Les tests d'intégration et les tests unitaires ont des portées et des fins:

  • tests unitaires tester de petits morceaux de code (comme une fonction) dans l'isolement du reste du programme, couvrant idéalement tous les cas limites possibles (comme exceptions, paramètres NULL, etc.)
  • Les tests d'intégration testent une application entière du point de vue d'un cas d'utilisation. Ils ne peuvent jamais couvrir tous les cas de bords, mais ils peuvent intercepter les problèmes d'interaction entre les parties du code et le code de la colle qui les unit. Les tests unitaires manquent souvent

Pour une fonction unique, vous pouvez vraiment avoir seulement 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 donné, une photo est écrite dans le répertoire, et peut également être ouverte dans le programme.

1

Certaines personnes appelleraient un test pour un DAO un test d'intégration; d'autres diraient que c'est un test unitaire. Peu importe comment vous l'appelez, je dirais que vous devriez avoir un test unitaire pour toutes les fonctionnalités DAO et un test d'intégration pour le comportement front-to-back incorporé dans le cas d'utilisation qui dit «donner à l'utilisateur l'option de enregistrer dans le 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.

1

Je pense que cela dépend de la source de votre problème. Si la fonction elle-même peut présenter des problèmes dans différents scénarios, vous pouvez effectuer des tests unitaires pour tester ces scénarios sur votre fonction. Si l'intégration de votre fonction et d'autres parties de votre programme peut causer des problèmes, vous devriez penser à un test d'intégration. Parfois, une fonction comme la vôtre peut avoir besoin des 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

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

Les tests unitaires contribuent dans une certaine mesure au premier objectif. De plus, il a deux avantages:

  • Il est généralement beaucoup moins cher à écrire et run 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 en utilisant des tests unitaires qu'un test d'intégration. Supposons que vous ayez une configuration impliquant trois composants. Chacun d'eux a 3 états différents. Ensuite, l'intégration testant l'ensemble de l'installation impliquerait de vérifier 3 * 3 * 3 = 27 conditions. L'unité testant les composants individuels nécessiterait de tester 3 + 3 + 3 = 9 conditions. (Ceci est simplifié à l'extrême, mais vous l'aurez compris)

De ce fait, les tests unitaires sont généralement plus populaires que les tests d'intégration. Cependant, vous ne pouvez vraiment pas vous passer de tests d'intégration. Les tests d'intégration devraient être la pierre angulaire utilisée pour l'acceptation de votre logiciel. Avoir des tests unitaires prouve seulement que vous avez un tas de choses à faire quelque chose. Un test d'intégration prouve que vous avez logiciel de travail.

Questions connexes