Replies: 5 comments
-
Due to the removal of relevant context all i can say with the code provided is make the parameter a own fixture and stop missing with the internals |
Beta Was this translation helpful? Give feedback.
-
What context is missing? |
Beta Was this translation helpful? Give feedback.
-
from dataclasses import dataclass
import pytest
@dataclass
class DataShape:
param1: int
param2: str
@pytest.fixture
def common_params(request: pytest.FixtureRequest) -> DataShape:
return request.param
@pytest.fixture
def param1(common_params: DataShape) -> int:
return common_params.param1
@pytest.fixture
def param2(common_params: DataShape) -> str:
return common_params.param2
@pytest.fixture
def stash(param2: str) -> str:
return param2
@pytest.mark.parametrize(
'common_params',
(DataShape(42, 'криївка'), ),
indirect=True,
)
@pytest.mark.usefixtures('common_params')
def test_accessing_param2(stash: str) -> None:
assert stash == 'криївка' |
Beta Was this translation helpful? Give feedback.
-
Suppose import pytest
def flaky_computation1(param1):
return param1 + 1
def flaky_computation2(param2):
return param2 + "!"
class DataShape:
def __init__(self, param1: int, param2: str):
self.param1 = flaky_computation1(param1)
self.param2 = flaky_computation2(param2)
@pytest.fixture
def common_params(request: pytest.FixtureRequest) -> DataShape:
return request.param
@pytest.fixture
def param1(common_params: DataShape) -> int:
return common_params.param1
@pytest.fixture
def param2(common_params: DataShape) -> str:
return common_params.param2
@pytest.fixture
def stash(param2: str) -> str:
return param2
@pytest.mark.parametrize(
'common_params',
(DataShape(42, 'криївка'), ), # shouldn't call flaky_computation1()
indirect=True,
)
@pytest.mark.usefixtures('common_params')
def test_accessing_param2(stash: str) -> None:
assert stash == 'криївка!'
@pytest.mark.parametrize(
'common_params',
(DataShape(42, 'криївка'), ), # should be reused from the parameter of test_accessing_param2
indirect=True,
)
def test_full(common_params) -> None:
assert str(common_params.param1) + common_params.param2 == "43криївка!" |
Beta Was this translation helpful? Give feedback.
-
Converting this into a discussion because I don't see anything actionable for pytest here. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Downloading images from the Internet is flaky. I'm trying to reuse the images in tests to reduce instability. I also want the images to be removed from memory after they aren't needed. I'm trying to achieve that with the following code
test_images[images2]
printstest_images: images[image-1 image-1 image-1]
instead of 1, 2, 3. I'd likerequest.getfixturevalue()
to have a parameter to be passed to the fixture. I've checkedpytest-lazy-fixture
but its fixtures cannot be parametrized (https://stackoverflow.com/a/62166129/25242963).Beta Was this translation helpful? Give feedback.
All reactions