Je souhaite être capable de renvoyer une valeur d'un appareil à plusieurs tests/classes de test, mais la valeur transmise est une fonction.pytest fixture renvoie toujours une fonction
Voici mon code:
import pytest
@pytest.fixture()
def user_setup():
user = {
'name': 'chad',
'id': 1
}
return user
@pytest.mark.usefixtures('user_setup')
class TestThings:
def test_user(self):
assert user_setup['name'] == 'chad'
La sortie est:
=================================== FAILURES ===================================
_____________________________ TestThings.test_user _____________________________
self = <tests.test_again.TestThings instance at 0x10aed6998>
def test_user(self):
> assert user_setup['name'] == 'chad'
E TypeError: 'function' object has no attribute '__getitem__'
tests/test_again.py:14: TypeError
=========================== 1 failed in 0.02 seconds ===========================
Mais si je réécris mon test afin qu'il ne pas utiliser le décorateur usefixtures
, il fonctionne comme prévu:
def test_user(user_setup):
assert user_setup['name'] == 'chad'
Des idées pour lesquelles cela ne fonctionne pas lorsque j'essaie d'utiliser la méthode du décorateur?
Merci pour l'explication claire sur comment cela fonctionne. Je pensais que je pourrais accomplir ceci sans devoir ajouter l'argument à chaque fonction de test qui est dans ma classe de test. – Cass
Je cherchais juste la différence et/ou des cas d'utilisation pour ces deux variantes et quand utiliser quoi, merci pour cette explication. – Zelphir
Selon les docs officiels, vous ne devriez pas * avoir * à ajouter 'user_setup' à chaque fonction de test quand ils sont groupés sous une classe décorée avec' @ pytest.mark.usefixtures': "En raison du marqueur" usefixtures ", le cleandir fixture sera nécessaire pour l'exécution de chaque méthode de test, comme si vous aviez spécifié un argument de fonction "cleandir" pour chacun d'entre eux. "(Source: http://pytest.org/latest/fixture.html#using-fixtures -from-classes-modules-or-projects) Après tout, le but de regrouper des tests comme celui-ci est de les manipuler comme un lot.) ... Peut-être que c'est un bug pyest? – Zearin