Je répète le code principalement pour un usage personnel, mais je envisage de libérer une application (simulation scientifique / visualisation) que j'ai initialement développée pour un usage personnel. P>
Une de mes habitudes est d'utiliser une méthode principale dans les classes pour tester le fonctionnement de la classe isolée. Je pense que c'est probablement mauvais de ce fait (comme cela ne fait aucun doute diverses autres habitudes provenant de l'auto-enseignement et de l'environnement de développement scientifique). Cependant, ce n'est jamais un problème d'utilisation de soi que j'ai remarqué. P>
Souhaitez-vous tous être si gentils pour confirmer (ou refuser) que la prolifération du secteur est un problème pour une demande publiée à la communauté scientifique (la source serait également ouverte), et si oui, pourquoi? P >
Edit: Pour jouer à l'avocat du diable (d'accord, mon avocat) relatif à certaines des réponses proposées: une partie de "l'utilisation de l'application" devrait être une modification de source par des non-développeurs (le scientifique typique) sur une échelle peu importante. Je sais que sur la fin de la réception, que les tests d'une classe construite directement dans cette classe seraient assez simples pour que je puisse reconnaître et modifier en conséquence (surtout si cela était toujours le cas pour les classes). Utiliserait quelque chose comme Junit fournir une utilité similaire, garder à l'esprit le public? P>
Accepter la décision: Je pense que la réponse de Kle est le meilleur équilibre de profondeur et de succincte, alors je l'ai choisie, mais je pense que les commentaires de discussion dans les projets de loi sont également très utiles. Je ne comprends pas non plus pourquoi la réponse de Johannes a été votée - la perspective "Comment fonctionner cette pièce" est très importante pour les codeurs de la communauté scientifique - et tandis que les autres réponses soulignent diverses raisons pour lesquelles des tests d'unité séparés sont probablement plus utiles que mon Habitualité actuelle, ils ne traitent pas vraiment de cette utilisation. Sa réponse est donc loin de "inutile". Merci à tous les répondeurs actuels (et futurs), et ici pour souhaiter qu'il y ait un moyen de combiner plusieurs réponses que la réponse correcte! P>
7 Réponses :
Test de votre classe dans sa propre méthode principale est mauvais car il donne à la classe une responsabilité supplémentaire (test elle-même). Les tests doivent aller dans des classes séparées, de préférence à l'aide d'une bibliothèque de test comme Junit . P>
La prolifération du secteur (j'aime cette phrase que vous avez inventée) le rend également plus déroutant pour un développeur de trouver le point d'entrée sur votre demande lorsqu'il l'approche pour la première fois. P>
+1: Tous Public statique vide Main code> doit être isolé dans des classes qui ne font presque rien d'autre. Tout le traitement "réel" devrait être ailleurs avec de meilleures API que principal code>. Ces objets de traitement «réels» doivent être instanciés par principal code>.
Disons que le développeur typique n'est pas en réalité un développeur et a peu à aucune des habitudes de codage mondiale «réelles». J'apprécie que votre réponse est probablement parfaitement correcte pour les gens effectivement employés comme des développeurs (bien que je n'ai aucune idée), mais pensez-vous que c'est le bon pour ce public atypique?
@Carl: Le développeur typique avec un peu d'expérience du monde réel suit probablement ce conseil, de sorte que le public atypique est exactement qui est pour cela.
Vous pensez donc qu'un package de test Junit accompagnant l'application est la manière préférable aux scientifiques de pouvoir faire des modifications et de pouvoir les tester? Comme vous le dites, c'est clairement la bonne réponse pour les développeurs réels, mais que vous regardez par-dessus les informations junivers, je ne suis toujours pas convaincu que c'est pour mon public cible. Pourquoi leur demander d'apprendre un cadre supplémentaire pour ce qui peut être un changement relativement mineur qu'ils veulent faire / tester?
Les tests ne I> ont-ils i> dans un cadre de test unitaire, mais c'est préférable. Ils devraient être i> de manière définitive dans des classes séparées afin que le code de test ne flotte pas des classes que vos clients souhaitent inclure dans leurs propres applications. Les responsabilités de séparation rendront votre code beaucoup plus facile à comprendre, en particulier aux développeurs moins expérimentés.
Vous devez utiliser un outil de test tel que Junit pour effectuer des tests sur vos classes plutôt que d'insérer le code de test dans votre code de production. P>
Ceci sépare clairement les tests de votre code. p>
Ce n'est pas terrible mais il n'est pas conseillé pour deux raisons: p>
C'est (2), vous devriez vraiment vous concentrer sur. p>
Tout d'abord, c'est génial que vous écriviez des tests. Je n'aime pas vraiment l'approche d'avoir une méthode principale dans de nombreuses classes dans un projet. Je préconiserais déplacer le code de test et utiliser un cadre de test. Cela empêche le nettoyant de code source et si vous utilisez une méthode de nommage cohérente pour vos cours de test, il est également facile de trouver les tests associés. P>
Il n'y a rien de mal à cette approche en soi, mais il y a un inconvénient majeur: vous devez appeler chaque méthode Avec des outils Junit et similaires, vous pouvez marquer le code comme "Ceci est un test". Cela permet à l'outil de trouver automatiquement tous les tests de votre projet et de les exécuter à la fois. De cette façon, des chances sont beaucoup plus élevées que vous exécuterez tous les tests la plupart du temps et que les bugs sont pris tôt. P> principale () code> individuellement pour tester tout votre code. Les chances sont que vous ne le ferez pas. C'est juste trop hazzle. De plus, lorsque cela faisait cela, vous devez savoir quel Main () code> sont des points d'entrée réels et lesquels sont des tests. Ce n'est pas du tout évident. P>
Junit vous permet de tester, tout comme votre secteur, mais aussi: P>
Je n'utiliserais pas les principales méthodes dans toutes les classes à des fins de test. Premièrement, de suivre la règle de séparation des préoccupations (en utilisant et les tests sont des préoccupations différentes) et parce que nous avons des solutions élégantes pour les tests. P>
Deuxièmement, et cela n'a pas été mentionné jusqu'à présent, si chaque classe a une méthode principale, il est assez difficile de trouver le point d'entrée «réel» dans l'application. Si je vois une classe avec une méthode principale, je m'attends à ce que cela me permettra de «utiliser» la classe à la manière prévue. Je ne m'attends pas, que cela démarrera un cas de test (peut-être avec des effets secondaires graves). p>
ah, juste un troisième aspect qui me vient à l'esprit: les principales méthodes sont toujours publiques. L'utilisateur de votre bibliothèque est donc libre d'utiliser ces méthodes à tout moment, même de l'exécution de sa propre application. Cela peut avoir des effets secondaires terribles, en particulier dans les environnements multi-filetés. P>
+1 Nice exposition vous-même ;-)
Je suis d'accord avec Kle. Il est important de parler de mauvaises habitudes afin que vous puissiez savoir pourquoi i> ils sont mauvais (et non seulement suivent aveuglément le troupeau) ou justifier pourquoi ils pourraient être d'accord sous un ensemble de circonstances spécifiques.
@Bill joliment mis. Je ne pouvais pas assembler les mots exacts, mais vous l'avez fait. Vous êtes probablement un orateur anglophone, avez de bonnes compétences en communication et certainement pensé b> à ce sujet. _ _ _ Merci et continuez ... Certains d'entre nous regardent et apprennent de vous ;-)