Comment tester la fonction Python décorateurs?
Je suis en train d'écrire des tests unitaires pour s'assurer de l'exactitude des différents décorateurs j'ai écrit. Voici le début du code, je suis en train d'écrire:
import unittest
from memoizer import Memoizer
from strategies.mru import MRU
@Memoizer(strategy=MRU(maxsize=10))
def fib(x):
if x < 2:
return 1
else:
return fib(x-1) + fib(x-2)
class TestMemoizer(unittest.TestCase):
def test_simple(self):
self.assertEqual(fib(0), 1)
self.assertEqual(fib(1), 1)
self.assertEqual(fib(10), 89)
if __name__ == '__main__':
unittest.main()
Alors que cela fonctionne décemment pour le MRU stratégie que j'ai ci-dessus, j'ai l'intention d'écrire d'autres stratégies, dans ce cas, je vais avoir besoin pour décorer avec le fib fonction de différentes manières. (Rappelons qu'en raison de la fib appels fib, réglage fib2 = memoize(fib) n'a pas memoize des valeurs intermédiaires, de sorte que ne fonctionnera pas.) Quelle est la bonne façon de tester les autres décorateurs?
OriginalL'auteur Ceasar Bautista | 2011-11-02
Vous devez vous connecter pour publier un commentaire.
Prendre un regard sur les tests de la bibliothèque standard pour des exemples: http://hg.python.org/cpython/file/3.2/Lib/test/test_functools.py#l553
Je l'habitude d'ajouter certains d'instrumentation à la fonction d'être enveloppé pour que je puisse surveiller les appels.
Au lieu de memoizing la fonction de test au niveau du module, j'ai créer le memoized fonction à l'intérieur de le test, alors qu'un nouveau est créé pour chaque essai et pour chaque décorateur variante.
J'aimerais voir votre MRU code lorsque vous avez terminé. Nous l'espérons, vous permettra de poster un lien.
Bien sûr! Le code de mon memoizer est ici: github.com/Ceasar/memoizer EDIT: je pense que mon mru.py devrait en fait être appelé lru.py
OriginalL'auteur Raymond Hettinger
Qu'en est plutôt compliqué
De cette façon, vous pourriez faire
OriginalL'auteur glglgl