dingus est un peu comme un objet fantaisie. La principale différence est que vous ne avez pas mis en place les attentes à l'avance. Vous venez de lancer votre code, en utilisant un dingus en place d'un autre objet ou une classe, et il va enregistrer ce qui lui arrive. Puis, une fois votre code a été exercé, vous pouvez faire des affirmations sur ce qu'il a fait pour les dingus.
Une nouvelle dingus est créé à partir de la classe Dingus. Vous pouvez donner des noms de dinguses, ce qui contribue à déboguer vos tests, en particulier quand il ya plusieurs dinguses en jeu.
& Nbsp; >>> from dingus importer Dingus
& Nbsp; d = >>> Dingus («root»)
& Nbsp; d >>>
& Nbsp;
Accès ne importe quel attribut d'un dingus reviendra un nouveau dingus.
& Nbsp; >>> d.something
& Nbsp;
Il ya quelques exceptions pour Dingus spéciaux méthodes. Nous allons voir certains dans un peu.
Un dingus peut aussi être appelé comme une fonction ou une méthode. Il ne se soucie pas combien d'arguments que vous lui donnez ou ce que ces arguments êtes. Les appels vers un dingus retourneront toujours le même objet, indépendamment des arguments.
& Nbsp; d >>> ()
& Nbsp;
& Nbsp; >>> d ('argument')
& Nbsp;
& Nbsp; d >>> (55)
& Nbsp;
ENREGISTREMENT ET AFFIRMATIONS
A tout moment, nous pouvons obtenir une liste des appels qui ont été faites à un dingus. Chaque entrée dans la liste d'appel contient:
& Nbsp; * le nom de la méthode appelée (ou "()" si le dingus lui-même était appelé)
& Nbsp; * Les arguments, ou () si aucun
& Nbsp; * Les mots clés argumnets, ou {} si aucune
& Nbsp; * La valeur qui a été renvoyée à l'appelant
Voici une liste des appels que nous avons apportées à d jusqu'à présent:
& Nbsp; >>> from pprint importation pprint
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('()', (), {},
& Nbsp; ('()', ('argument',), {},
& Nbsp; ('()', (55,), {},
Vous pouvez filtrer les appels par nom, les arguments et arguments mot-clé:
& Nbsp; >>> pprint (d.calls ('()', 55))
& Nbsp; [('()', (55,), {},
Si vous ne vous souciez pas de la valeur d'un argument particulier, vous pouvez utiliser la valeur DontCare lors du filtrage:
& Nbsp; >>> from dingus importer DontCare
& Nbsp; >>> pprint (d.calls ('()', DontCare))
& Nbsp; [('()', ('argument',), {},
& Nbsp; ('()', (55,), {},
Dinguses peuvent faire plus que simplement avoir les attributs accessibles et être appelé. Ils soutiennent de nombreux opérateurs de Python. L'objectif est de permettre, et enregistrer, toute interaction:
& Nbsp; d = >>> Dingus («root»)
& Nbsp; >>> (2 ** d.something) [«bonjour»] () / 100 * 'foo'
& Nbsp;
(Je espère que vos enregistrements Dingus monde réel ne seront pas ressembler à ceci!)
PATCHING
Dingus fournit un gestionnaire de contexte pour patcher objets lors des essais. Par exemple:
& Nbsp; >>> from dingus correctif d'importation
& Nbsp; >>> urllib2 d'importation
& Nbsp; >>> avec le patch ('urllib2.urlopen'):
& Nbsp; ... imprimer urllib2.urlopen .__ class__
& Nbsp;
& Nbsp; >>> print urllib2.urlopen .__ class__
& Nbsp;
Vous pouvez également l'utiliser comme un décorateur sur vos méthodes d'essai:
& Nbsp; >>>patch ('urllib2.urlopen')
& Nbsp; ... def test_something (auto):
& Nbsp; ... passe
& Nbsp; ...
MAGIC DANGEREUX
Dingus peut également remplacer automatiquement les variables globales d'un module lors de l'exécution des tests. Cela vous permet d'écrire des tests unitaires totalement isolés. Voir les exemples / urllib2 / test_urllib2.py pour un exemple. L'auteur ne recommande plus de cette fonction, car il peut encourager des tests très fragiles. Vous devriez sentir la douleur de dépendances moqueurs manuellement; . la douleur vous dira quand une classe collabore avec d'autres trop nombreux
Exigences :
- Python
Commentaires non trouvées