IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Mock d'une classe parente


Sujet :

Python

  1. #1
    Membre régulier Avatar de corwin
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 85
    Points : 77
    Points
    77
    Par défaut Mock d'une classe parente
    Bonjour,

    j'ai un petit problème avec les objet mock : comment faire pour "mocker" une classe parente ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MaClasse(Component):
        def __init__(self):
            Component.__init__(self)
            self._db = self.env.getDb()
     
        def methodeAAA(self):
             """ travaille avec self._db """
             stmt = "blahblah"
             self._db.execute(stmt)
             ...
    je voudrais tester la methode "methodeAAA" qui efectue des operation sur self._db
    mais je n arrive pas a mocker la classe parente "Component".
    Remarque Component me permet d'acceder a l'attribut env

    En fait je vois pas du tout comment faire pour m'abstraire de cette fichue classe.
    Esc e que quelq'un a une idee ? Je prend toute solution quelque soit la lib de mock utiliser j adapterais.
    D'ailleur au passage quel lib vous utiliser et pour quoi celle ci ?
    Pour le moment mon projet démarre et j'hésite entre :
    Pyhton mock mmodule de Dave Kirby's et
    mock de Michael Foord (fuzzyman)

    merci pour vos retours

  2. #2
    Membre régulier Avatar de corwin
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 85
    Points : 77
    Points
    77
    Par défaut
    Bon après plusieurs heures de galère j'ai compris le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     moninstance = MaClasse(envInstance)
    en fait j'avais zapper que MaClasse prenait en parametre une instance d'une autre classe "envInstance" qui est passer a la classe parente Component.
    Celle ci va faire des traitemetn dessus au moment de l'instanciation (allocation mémoire et initialisation).
    J'ai réussi a mocker le tout en créant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class MockEnv(list, Mock):
                def __init__(self):
                    self.components = {}
                    list.__init__(self)
                    Mock.__init__(self, methods=[])
     
                    """ define all useful internal mock for MaClasse """
                    mockCursor = Mock(methods=['execute'])
     
                    mockDb = Mock(methods=['cursor','commit','rollback'])
                    mockDb.cursor.return_value = mockCursor
     
                    self.env = Mock(methods=['get_db_cnx','log'])
                    self.env.get_db_cnx.return_value = mockDb
     
     
                def component_activated(self, component):
                    """ use this method for adding attribut to MaClasse """
                    setattr(component,'env', self.env)
    en effet notament l'instantiation de Component appel la methode component_activated que je redéfini ici et qui me permet de créer un nouvelle attribut env qui pointe vers un jolie Mock. Merci Python ... c 'est que du bonheur
    de pouvoir manipuler les objets à la volé

    le code de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    from monPackage import MaClasse
    self.mockEnv = MockEnv()
    self.vdb = MaClasse(self.mockEnv)
      ...
    self.vdb.delete_object(type, name)
    self.assertTrue(self.vdb._cursor.execute.called)
      ...
    Bon mon usage est peut être un peu spéciale mais je poste quand même au cas ou cela donne des idées a quelqu'un.

    Au passage j'utilise finalement la lib de mickael foord aka fuzzyman

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/12/2010, 21h25
  2. [CS3] Supprimer un objet crée dans une classe parent
    Par renaud26 dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 28/10/2010, 00h15
  3. Q: Objet hérite d'une classe parente ?
    Par Chavadam dans le forum C#
    Réponses: 3
    Dernier message: 20/07/2010, 11h09
  4. Réponses: 21
    Dernier message: 14/01/2010, 12h50
  5. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo