7
votes

En C #, quel est un bon moyen d'améliorer la boucle de rétroaction de test unitaire?

Lorsque vous travaillez sur des projets plus importants, il peut prendre au moins 10 secondes pour compiler et démarrer le cadre de test d'unité. Existe-t-il des moyens efficaces de réduire le temps de rétroaction? J'ai l'intention de fabriquer de petits changements dans une classe de test d'une unité et une autre classe entre les essais.

J'ai envisagé d'autres approches. Je ne vois aucun moyen de compiler et de gérer une classe de test unique et des dépendances. Je pourrais augmenter le nombre de projets dans la solution afin que chaque assemblée prenne moins de temps pour compiler, mais cela provoque d'autres problèmes. Ncrunch semble réduire la nécessité de lancer manuellement des tests, mais il compile toujours des assemblées complètes.

Clarification: Les 10 secondes comprenaient du temps pour compiler la classe de test de l'unité et la classe sous test. Mon problème avec NCrunch peut avoir été à cause d'un ordinateur moins puissant.


0 commentaires

3 Réponses :


2
votes

Vous pouvez consulter autotest.net , qui est un complément pour Visual Studio qui Exécute vos tests d'unité en arrière-plan lorsque vous écrivez votre code.

De cette façon, vous pouvez traiter vos tests de l'unité plus, comme des erreurs / des avertissements du compilateur et obtenez des commentaires relativement en temps réel.


0 commentaires

0
votes

Les tests d'unités déclaratives seront effectivement nul le temps de compilation, mais uniquement si votre architecture le permet. Par exemple, déplacer les tests d'unité vers la base de données a bien fonctionné pour nous dans un projet à grande échelle.


2 commentaires

Je vais toujours apporter des modifications à une classe testée. Je n'ai jamais envisagé de déplacer des tests d'unité dans une base de données.


Oui, il y aurait une amélioration lorsque de nouveaux tests sont ajoutés uniquement.



7
votes

Vous devez mettre chaque classe de test dans un assemblage séparé - un assemblage est efficacement l'unité de compilation. Si cela prend 10 secondes pour recompiler après Just un changement à une classe de test, cela suggère que vous ayez trop de tests dans un assemblage ou que vous avez une machine très lente. Il pourrait bien s'agir d'obtenir une meilleure machine (ou d'améliorer l'existant avec plus de mémoire ou d'un SSD) est la meilleure voie à suivre.

J'utilise NCrunch moi-même, et bien que cela compile toujours des assemblées complètes, le fait qu'il le fasse dans l'arrière-plan signifie qu'aucun moment où j'ai pris un souffle mentale, les tests ont reconstruit et sont en cours d'exécution. NCrunch fonctionne bien si vous avez plusieurs processeurs et un RAMDISK, à la manière - vous pouvez définir où il construit, ainsi que le nombre de processeurs qu'il peut utiliser.

Si vous n'avez que considérées ncrunch (ou Le puissant orose etc - des trucs similaires ) Mais ne l'a pas réellement essayé, vous devriez lui donner un aller avant de supposer que cela ne sera pas assez rapide pour vous.


6 commentaires

Je n'étais pas clair sur un point. Les 10 secondes suivaient une modification de la classe testée. J'ai essayé NCrunch, mais je pense que mon ordinateur manquait de pouvoir.


J'utilise NCrunch et cela fonctionne bien. Accordé, j'ai un ordinateur récent et un SSD.


@BENMADDOX: Quelle spécification est votre machine et comment la réaliste serait-elle de l'améliorer?


@ Jonskeet qui varie selon le mois. Le meilleur jusqu'à présent a été un ordinateur portable avec un noyau 2 quad avec 4 Go de RAM et un disque dur de 7200 tr / min. Ces machines appartiennent à des clients, j'ai donc une capacité minimale à les améliorer.


@BenMaddox: Il se peut que la peine d'être avancée avec vos clients alors: «L'efficacité de mon codage dépend du matériel que j'ai fourni».


J'ai utilisé NCrunch au cours des deux dernières semaines. Cela fonctionne bien jusqu'à présent. Je pense que la performance a été améliorée depuis que je l'ai déjà essayé. Merci.