2012-10-11 2 views
1

Au travail, nous utilisons un décorateur @rollback sur des fonctions de test sélectionnées qui annuleront toutes les modifications de base de données effectuées pendant ce test.pytest: Utilisation de l'injection de dépendances avec les décorateurs

J'ai récemment commencé à utiliser l'injection de dépendance de pytest pour quelques cas d'utilisation, à la fois avec @pytest.mark.parametrize(...) et le hook pytest_funcarg__XXX. Malheureusement, cela se heurte à nos fonctions de test décorées.

Comment est-ce que je peux faire ce travail?

Ma première idée utilisait un marqueur personnalisé, et dire @pytest.mark.rollback faire quelque chose comme:

def rollback(meth): 
    """Original rollback function""" 
    ... 

def pytest_runtest_setup(item): 
    if not isinstance(item, pytest.Function): 
     return 
    if hasattr(item.obj, 'rollback'): 
     item = rollback(item) 

Peut serait une approche comme celui-ci fonctionne réellement?

Répondre

0

Quelque chose comme ça devrait fonctionner, oui. On dirait que vous utilisez l'état global pour gérer votre base de données, ici, non? Vous voudrez peut-être à la caisse la documentation de la prochaine version 2.3 qui a également un « transiger » par exemple plus bas cette page:

http://pytest.org/dev/fixture.html

La libération est due tout temps et vous pouvez installer le candidat « pip installez -i http://pypi.testrun.org -U pytest ".

Questions connexes