J'ai plusieurs classes qui partagent des invariants et ont une interface commune, et je voudrais lancer automatiquement le même test pour chacune d'entre elles. Par exemple, supposons que j'ai plusieurs classes qui implémentent des approches différentes pour partitionner un ensemble de données. L'invariant commun ici serait que, pour toutes ces classes, l'union sur toutes les partitions devrait être égale à l'ensemble de données original.Comment exécuter le même test-case pour différentes classes?
Ce que j'ai actuellement ressemble à quelque chose comme ceci:
class PartitionerInvariantsTests(unittest.TestCase):
def setUp(self):
self.testDataSet = range(100) # create test-data-set
def impl(self, partitioner):
self.assertEqual(self.testDataSet,
chain.from_iterable(partitioner(self.testDataSet))
Puis-je ajouter une autre fonction qui appelle impl
pour chacune des classes que je veux tester avec une instance de cette classe. Le problème avec ceci devient évident en faisant cela pour plus d'une fonction de test. Supposons que j'ai 5 fonctions de test et 5 classes que je veux tester. Cela ferait 25 fonctions qui sembleraient presque identiques pour invoquer tous les tests.
Une autre approche à laquelle je pensais était de mettre en œuvre le modèle en tant que super-classe, puis de créer une sous-classe pour chacune des classes que je veux tester. Les sous-classes pourraient fournir une fonction pour instancier la classe. Le problème avec cela est que le test-loader par défaut considérerait la classe de base (inutilisable) comme un cas de test valide et essaierait de l'exécuter, ce qui échouerait.
Alors, quelles sont vos suggestions?
P.S .: J'utilise Python 2.6
Unittest essaiera-t-il d'exécuter la classe de base s'il n'hérite pas de 'unittest.TestCase'? – nmichaels
@Nathon: Maintenant que vous le dites, je n'ai pas encore essayé. –
@Nathon, si vous souhaitez poster votre idée comme une réponse, je vais heureusement supprimer le mien. – unutbu