Hi Nikolaus,
On 11/26/2014 01:21 PM, Nikolaus Rath wrote:
> I have a parametrized fixture foo, and some test cases that use it:
>
> @pytest.fixture(params=(1,2,3,4,5))
> def foo(request):
> # ...
> return foo_f
>
> def test_1(foo):
> # ...
>
> def test_2(foo):
> # ....
>
> Now, I'd like to add an additional test, but running it only makes sense
> for some of the fixture parameters. So far I've solved this by providing
> the parameter value as a fixture attribute and skipping "unsupported" values:
>
> @pytest.fixture(params=(1,2,3,4,5))
> def foo(request):
> # ...
> foo_f.param = request.param
> return foo_f
>
> def test_3(foo):
> if foo.param not in (1,4,5):
> raise pytest.skip("doesn't make sense")
>
>
> This works, but I don't like it very much because it means that the test
> suite can never be executed without skipping some tests. I'd rather
> reserve skipping for cases where the test could in principle be
> executed, but for some reason cannot work at the moment (e.g. because
> there's no internet, or a required utility is not installed).
>
> Is there a way to solve the above scenario without skipping tests?
>
> Ideally, I'd be able to do something like this:
>
> @only_for_param((1,4,5))
> def test_3(foo):
> ...I think in order to do this you'll need to use the `pytest_generate_tests` hook: http://pytest.org/latest/parametrize.html#pytest-generate-tests I might be wrong (haven't had to use pytest_generate_tests much), but I don't think you'll be able to keep the simple parametrized fixture and layer this on top; I don't think pytest_generate_tests can tweak the fixture params per-test. You'll need to remove the fixture parametrization and do it instead via pytest_generate_tests, using indirect=True. Carl
signature.asc
Description: OpenPGP digital signature
_______________________________________________ pytest-dev mailing list [email protected] https://mail.python.org/mailman/listinfo/pytest-dev
