J'apprends pytest, en particulier ses appareils qui sont différents des paradigmes xUnit setUp() et tearDown(). Dire que je le test suivant:Utilisation répétée d'appareils dans pytest
import pytest
@pytest.fixture()
def foo():
return 'foo'
@pytest.fixture()
def bar():
return 'bar'
@pytest.fixture()
def baz():
return 'baz'
@pytest.fixture()
def foobar(foo, bar):
return foo + bar
@pytest.fixture()
def foobaz(foo, baz):
return foo + baz
def test(foobar, foobaz):
print('test')
print(foobar)
print(foobaz)
Dans cet exemple, l'appareil foo()
est utilisé deux fois, une fois par foobar()
et encore par foobaz()
. Si je réutilise le même appareil plusieurs fois pour un seul test, la fonction fixture est-elle appelée une fois et son résultat mis en cache? Ou est-ce appelé à chaque fois qu'il est utilisé? Dans mon exemple artificiel, la valeur retournée est statique, donc il n'y a pas de problèmes. Je peux imaginer de nombreuses situations où la valeur retournée est plus dynamique et je dois garantir que j'ai la même instance partout où elle est utilisée.
Donc, pour 'test () 'dans mon exemple,' foo() 'ne sera-t-il appelé qu'une fois même s'il est utilisé à la fois par' foobar() 'et' foobaz() '? –
c'est correct, ils sont appelés une fois par fonction, indépendamment du fait qu'ils soient réutilisés dans d'autres appareils. – Sanju