Question

Je programme principalement dans scala et java, en utilisant scalatest dans scala et JUnit pour les tests unitaires. Je voudrais d'appliquer les critères mêmes à plusieurs implémentations de la même interface / trait. L'idée est de vérifier que le contrat d'interface est appliquée et de vérifier le principe de substitution Liskov.

Par exemple, lors du test de mise en oeuvre des listes, des tests pourraient inclure:

  • Une instance doit être vide, si et seulement si et seulement si elle a une taille zéro.
  • Après avoir appelé clairement, la taille doit être égale à zéro.
  • Ajout d'un élément dans le milieu d'une liste, est incrémenté par un indice d'éléments de rhs.
  • etc.

Quelles sont les meilleures pratiques?

Était-ce utile?

La solution

Cela semble que cela pourrait être un emploi pour les tests partagés. les tests sont des tests communs qui sont partagés par différents objets de fixation. À savoir, le même code de test est exécuté sur des données différentes. ScalaTest jouit du soutien pour cela. Recherchez des "tests partagés" dans la documentation de votre trait de style préféré qui représente des tests comme des fonctions (Spec, WordSpec, FunSuite, FlatSpec, etc.). Un exemple est la syntaxe pour FlatSpec:

it should behave like emptyList

Voir Tests de partage dans la documentation FlatSpec

Autres conseils

En Java / JUnit, je manipule généralement en ayant une testcase abstraite dont les tests pour la classe de test spécifique héritent tous les tests et ont une méthode de configuration instancier la mise en œuvre. Je ne peux pas regarder la abyx vidéo posté en ce moment, mais je pense que c'est cette idée générale.

Une autre possibilité intéressante si vous ne me dérange pas l'introduction d'un autre cadre d'essai serait d'utiliser Jdave classes de spécification.

Je ne l'ai pas essayé d'utiliser l'un de ceux-ci avec Scalatest ou avec des traits Scala et mises en œuvre, mais il devrait être possible de faire quelque chose de similaire.

tests de contrat sont faciles à faire avec JUnit 4, 'vidéo sa par Ben Rady.

Pour Scala, d'envisager sérieusement ScalaCheck. Tous ces contrats sont exprimable comme les spécifications d'une ligne à ScalaCheck. Lors de l'exécution, ScalaCheck va générer un nombre configurable d'entrées d'échantillons au hasard, et vérifier que toutes les spécifications tiennent. Il s'agit de la façon la plus dense sémantiquement possible de créer des tests unitaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top