2014-04-25 5 views
0

Dans ma webapp, j'ai une classe ListItem et beaucoup d'autres classes basées sur ce nom mais avec des noms différents.Cas de test Django basés sur le cas de test de base

J'ai actuellement des modules de test séparés pour tous ces modules. Cela signifie qu'il y a beaucoup de répétition du code de test.

J'essaye de créer une classe de BaseListItemTestCase qui a un ensemble self.listitem_model variable, l'utilise sur tous ses essais. Ce qui signifie que le code n'est pas répété.

Le self.listitem_model est défini dans un scénario de test enfant contenant uniquement une méthode init() pour le définir.

J'ai fait tout ce qui précède, le problème est, si theres 1 test dans la classe de test de base et j'ai seulement couru le cas de test de l'enfant, le test s'exécute deux fois.

Y a-t-il une raison à cela? Je veux juste que le test que je t'ai demandé de faire tourner.

class BaseListItemTestCase(APITestCase): 
    def __init__(self, *args, **kwargs): 
     super(BaseListItemTestCase, self).__init__(*args, **kwargs) 
     self.listitem_model = None 

    def test_something(self): 
     self.assertEqual(self.listitem_model.objects.all().count(), 0) 

class LikeListTestCase(BaseListItemTestCase): 

    def __init__(self, *args, **kwargs): 
     super(LikeListTestCase, self).__init__(*args, **kwargs) 
     self.listitem_model = LikeListItem 

Répondre

1

Vous avez placé la méthode de test dans la classe de base, elle est donc héritée par la classe enfant. Maintenant, il y a deux classes avec une méthode test_something, donc les deux seront exécutées.

Placez le test dans la classe enfant. Ou si vous voulez que la logique soit dans la classe de base, placez-la dans une méthode qui n'appartient pas à test_ et utilisez une méthode de base test_something dans la classe enfant qui appelle simplement cette méthode.