La goyave a des cas de tests unitaires générés automatiquement :
La goyave a un nombre impressionnant de tests unitaires: en juillet 2012, le package de tests de goyave comprend plus de 286 000 cas de test individuels. La plupart d'entre elles sont générées automatiquement , pas écrites à la main, mais la couverture des tests de Guava est extrêmement approfondie, en particulier pour com.google.common.collect.
Comment ont-ils été générés? Quelles techniques et technologies ont été utilisées pour les concevoir et les générer?
java
unit-testing
test-automation
dzieciou
la source
la source
Réponses:
Une grande partie de cette masse de tests concerne les implémentations de la collection Guava. Ils ont écrit des tests génériques qui testent de manière exhaustive les interfaces de collecte, ce qui génère une suite par implémentation. Voir, par exemple, des classes appelées
CollectionAddAllTester
,ListIndexOfTester
.Tout cela est soutenu par une bibliothèque appelée testlib, livrée avec Guava. C'est assez générique. Il prend en charge l'écriture de tests génériques pour n'importe quelle interface (pas seulement les collections). Vous pouvez spécifier
Feature
s des implémentations possibles et les tester (par exemple, si votre ensemble est non modifiable, vous attendez un résultat différentset.add()
), et lorsque vous exécutez les tests, vous spécifiez les fonctionnalités prises en charge par votre implémentation.Il est basé sur JUnit 3, et non sur 4. Normalement, vous avez une classe étendue
TestCase
pleine de méthodes nomméestestSomething()
, et JUnit les exécute de manière réfléchie. La bibliothèque testlib se connecte à l'exécution de ces tests afin que le cycle de vie ressemble à ceci:TestCase
instanceTestSubjectGenerator
- c'est l'interface testlib que vous étendez là où vous créez réellement le sujet de testgetSubjectGenerator()
donne accès au sujet du testLe bit clé est l'étape d'initialisation supplémentaire qui leur permet d'injecter un sujet de test spécifique dans le cas de test générique.
J'ai écrit un article sur la façon d'écrire des suites de génération de testlib pour vos propres interfaces.
(Également publié sur la même question sur le site sqa .)
la source
Il existe des générateurs de tests unitaires. Par exemple, dans le monde .NET, quelque chose comme Microsoft Pex pourrait le faire.
Par exemple, Microsoft Pex essaie en se basant sur l'analyse de code toutes les valeurs possibles comme arguments pour une méthode. Certains arguments devraient laisser la méthode lever une exception. De telles choses peuvent automatiquement créer des tests pour. Les valeurs statiques comme une chaîne vide renvoyée dans certains cas peuvent également être testées automatiquement.
la source