28 votes

Tests 2-3 fois plus gros que le code testable

Est-il normal d'avoir des tests qui sont plus grand que le code testé? Pour chaque ligne de code, je suis en train de tester j'ai l'habitude de 2-3 lignes dans l'unité de test. Ce qui conduit finalement à des tonnes de temps étant passé, juste en tapant les tests (de railler, se moquer et se moquent de plus).

Où sont les économies de temps? Avez-vous jamais éviter les tests pour le code qui est dans la ligne de l'être trivial? La plupart de mes méthodes sont à moins de 10 lignes de long et de tester chacun d'eux prend beaucoup de temps, au point où, comme vous le voyez, je commence à interroger l'écriture de la plupart des tests en premier lieu.

Je ne suis pas en préconisant de ne pas les tests unitaires, je l'aime. Veux juste voir quels sont les facteurs de gens considèrent avant d'écrire des tests. Ils viennent à un coût (en termes de temps, donc d'argent), de sorte que ce coût doit être évalué en quelque sorte. Comment estimez-vous les économies créées par des tests unitaires, si jamais?

14voto

Dror Helper Points 15499

Vous pouvez tester la bonne chose - vous ne devriez pas avoir de tests différents pour chaque méthode dans votre code.

Vous pourriez avoir trop de tests parce que vous la mise à l'essai et pas de la fonctionnalité de tester la façon dont les choses sont faites tester ce qui se fait.

Par exemple, si vous avez un client qui a le droit d'obtenir une remise sur chaque commande - créer un client avec les données correctes et créer un bon de commande pour le client et assurez-vous que le prix final est correct. De cette façon, vous de tester la logique métier, et non pas comment c'est fait à l'interne.

Une autre raison est pour les grandes épreuves, c'est le manque d'Isolement (un.k.un moqueur) si vous avez besoin d'initialiser des objets difficiles qui nécessitent beaucoup de code essayez d'utiliser des faux/on se moque de la place.

Et enfin, si vous avez compliqué tests, il peut être une odeur si vous avez besoin d'écrire beaucoup de code pour tester une fonctionnalité simple, c'est que votre code est étroitement couplée et votre Api ne sont pas assez claires.

6voto

Mark Seemann Points 102767

Le code de test unitaire doit suivre les mêmes bonnes pratiques que le code de production. Si vous avez autant de code de test unitaire, cela sent une violation du principe DRY .

La refactorisation de vos tests unitaires pour utiliser les méthodes de l'utilitaire de test devrait aider à réduire l'empreinte globale des tests unitaires.

2voto

bragboy Points 13615

Eh bien,

Il s'agit d'un scénario où plus de tests en assurer la stabilité. Par la stabilité, il ne signifie pas seulement que le code de test est plus libre d'erreur et infaillible, il donne l'assurance que le programme ne va pas se briser sous tous les cas à l'avenir. Toutefois fou vous passer des arguments à une méthode, le bloc de code sera de retour correctement (bien sûr avec les messages d'erreur appropriés là où requis).

Même plus, vous pouvez écrire vos scénarios de test unitaire avant même de connaître le fonctionnement interne de votre méthode en cours de test. C'est comme une boîte noire scénario où vous allez d'abord terminer l'écriture de vos cas de test, puis commencer à coder. La lourde avantage est que l'effort de développement deviendra sans erreur dans moins d'itérations en parallèle exécution du cas de test.

Et la taille du code de test n'a pas d'importance du tout. Tout ce qui compte c'est l'étendue et la couverture des tests unitaires. Si il vient de tests pour homonyme ou de son un grave cas de test qui s'occupe de tous les cas possibles.

1voto

Morten Mertner Points 5786

Les essais doivent être de trouver le bon équilibre, qui dépend de nombreux facteurs différents, tels que:

  • Fins commerciales (pensez à "contrôleur de pacemaker" vs "film inventory manager")
  • Les compétences de développement personnel
  • La rotation du personnel (comment souvent de personnes ajoutée le développeur de la piscine)
  • La complexité (du logiciel, liés à des "fins commerciales" ci-dessus)

En général, je ne écrire des tests pour le public "API" et, ainsi, de manière implicite à tout épreuve assemblée-les classes internes utilisés pour livrer au public de la fonctionnalité. Mais votre désir pour la fiabilité et la reproductibilité augmente, vous devez également ajouter des tests supplémentaires.

1voto

Anil Namde Points 2291

Question très valable et bonne. Je respecte un principe simple lorsque c'est nécessaire.

  1. Définissez la catégorie des problèmes que nous connaissons (critiques, élevés, faibles)
  2. Voyez combien de temps nous avons et réorganiser ensuite par discussion interne
  3. fixer les priorités
  4. Puis résolvez les problèmes

Bien que tout cela prenne beaucoup de temps, mais tant que nous nous souvenons que la sortie doit être bonne et sans bogue et que nous adhérons aux choses ci-dessus, les choses vont bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X