2010-11-30 91 views
3

Quelqu'un at-il rencontré un crochet de pré-validation SVN qui fonctionne avec la logique suivante?SVN crochet pour vérifier une modification a également été apportée à la classe de test correspondant

Si "MyClass.java" a été modifié et est en cours de validation, il doit également y avoir une modification de "MyClassTest.java", par convention de dénomination.

Le but ici est de s'assurer qu'un développeur a apporté des modifications au test unitaire correspondant, lorsqu'il a changé un morceau de code.

Je sais que cela peut être triché en changeant simplement un peu de formatage. Mais le but n'est pas d'arrêter de tricher. Il s'agit d'encourager fortement le développement piloté par les tests dans une équipe qui y évolue.

Un bonus serait, car lorsque le changement est juste un refactor, pour que le hook ignore la vérification si le commentaire de soumission a le mot "REFACTOR". (après que tous les refacteurs purs devraient toujours être engagés par eux-mêmes)

+3

Cela semble un peu restrictif. Que faire si vous ne faites que refactoriser le code et n'avez pas besoin d'un nouveau test? Ou si vous ajoutez juste un test? –

+0

Ajout d'un nouveau test ne devrait pas importer. Quant au refactoring, il devrait peut-être y avoir un override - example: si le commit commente contient le mot "REFACTOR" alors ne faites pas le test check – Patrick

+0

Pour ajouter à ce que dit @Alexandre, que faire si vous modifiez une interface? Avez-vous un test Test.java? Il semble exagéré de faire un test pour une interface juste pour satisfaire le crochet de validation SVN. Nous utilisons beaucoup TDD, et souvent lorsque nous refactorisons du code qui a déjà un tas de tests, nous pouvons refactoriser sans crainte car le code est déjà testé à 100%. Pourquoi devrais-je être forcé de faire un changement au test, les tests couvrent déjà 100% du code ... –

Répondre

1

Si ce que vous voulez réaliser est une "application" des tests unitaires, je suggère de vérifier dans le post-commit (le test est plus lent que l'opération habituelle de commit) si la couverture de test a diminué pour n'importe quelle classe. encore plus, mettez cette vérification dans votre serveur d'intégration continue.

Bien sûr, cela peut conduire à un test "stupide" de get et set juste pour obtenir plus de couverture. Cela peut être "empêché" en assignant un seuil de couverture et d'alerte seulement si le seuil est atteint. De cette façon, vous pouvez vendre à l'équipe l'idée d'un «mécanisme pour nous alerter si nous faisons une erreur» au lieu de «un mécanisme pour vous punir si vous faites le mal».

+0

Merci Soronthar. C'est la bonne façon de faire. Avoir suivi l'évolution de la couverture par CI. – Patrick