Chcę móc zwrócić wartość z urządzenia do wielu testów/klas testowych, ale wartość, która jest przekazywana, jest funkcją.urządzenie pytające zawsze zwraca funkcję
Oto mój kod:
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'
Wyjście jest:
=================================== 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 ===========================
Ale gdybym przepisać mój test tak, aby nie używać usefixtures
dekorator, że działa zgodnie z oczekiwaniami:
def test_user(user_setup):
assert user_setup['name'] == 'chad'
Jakieś pomysły, dlaczego nie działają, gdy próbuję użyć metody dekoratora?
Dzięki za jasne wyjaśnienie, jak to działa. Myślałem, że mogę to osiągnąć bez dodawania argumentu do każdej funkcji testowej, która jest w mojej klasie testowej. – Cass
Właśnie szukałem różnicy i/lub przypadków użycia dla tych dwóch wariantów i kiedy używać, które dzięki za wyjaśnienie. – Zelphir
Zgodnie z oficjalnymi dokumentami, nie powinieneś * mieć * dodawać 'user_setup' do każdej funkcji testowej, gdy są zgrupowane w klasie ozdobionej' @ pytest.mark.usefixtures': "Ze względu na znacznik Usefixtures, Do wykonania każdej metody testowania będzie wymagane oprzyrządowanie cleandir, tak jakby dla każdego z nich podano argument funkcji "cleandir". (Źródło: http://pytest.org/latest/fixture.html#using-fensions -z-klas-modułów-lub-projektów) Ostatecznie, cały punkt grupowania testów w ten sposób polega na manipulowaniu nimi jako partia.) ... Być może jest to błąd pyta? – Zearin