Pytest の fixture 関数は一度だけしか戻り値を返せないが ― 2023年02月15日 12時36分33秒
この fixture 関数で若干癖があるのが、これ。fixture 関数は一度しか値を返せない。
二度目の number は以下のように 1 のまま。
% cat test1.py
import pytest
n = 0
@pytest.fixture()
def number():
global n
n += 1
return n
def test_number(number):
assert number == 1
assert number == 2
% pytest test1.py
============================= test session starts ==============================
platform freebsd12 -- Python 3.8.15, pytest-4.6.11, py-1.9.0, pluggy-0.13.1
collected 1 item
test.py F [100%]
=================================== FAILURES ===================================
_________________________________ test_number __________________________________
number = 1
def test_number(number):
assert number == 1
> assert number == 2
E assert 1 == 2
test.py:13: AssertionError
=========================== 1 failed in 0.06 seconds ===========================
実は、fixture 関数が返せるのは値だけではない。ここで、関数を返すように少し書き換えると、複数回呼び出し、各々で違った値を取り出すことが出来る。
今度はテストが成功する。
% cat test2.py
import pytest
n = 0
@pytest.fixture()
def number():
def _number():
global n
n += 1
return n
return _number
def test_number(number):
assert number() == 1
assert number() == 2
これは結構頻繁に使われる技法。
pytest test.py
============================= test session starts ==============================
platform freebsd12 -- Python 3.8.15, pytest-4.6.11, py-1.9.0, pluggy-0.13.1
collected 1 item
test.py . [100%]
=========================== 1 passed in 0.02 seconds ===========================
%
最近のコメント