Skip to content

Commit 41cef6f

Browse files
committed
Don't skip fixtures that are substrings of params
Bug introduced with https://bitbucket.org/pytest-dev/pytest/pull-requests/257/allow-to-override-parametrized-fixtures Fix #736
1 parent 681e502 commit 41cef6f

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

_pytest/python.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1818,7 +1818,7 @@ def pytest_generate_tests(self, metafunc):
18181818
if fixturedef.params is not None:
18191819
func_params = getattr(getattr(metafunc.function, 'parametrize', None), 'args', [[None]])
18201820
# skip directly parametrized arguments
1821-
if argname not in func_params and argname not in func_params[0]:
1821+
if argname not in func_params:
18221822
metafunc.parametrize(argname, fixturedef.params,
18231823
indirect=True, scope=fixturedef.scope,
18241824
ids=fixturedef.ids)

testing/python/collect.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,19 @@ def value():
412412
['overridden'])
413413
def test_overridden_via_param(value):
414414
assert value == 'overridden'
415+
416+
@pytest.mark.parametrize('somevalue', ['overridden'])
417+
def test_not_overridden(value, somevalue):
418+
assert value == 'value'
419+
assert somevalue == 'overridden'
420+
421+
@pytest.mark.parametrize('other,value', [('foo', 'overridden')])
422+
def test_overridden_via_multiparam(other, value):
423+
assert other == 'foo'
424+
assert value == 'overridden'
415425
""")
416426
rec = testdir.inline_run()
417-
rec.assertoutcome(passed=1)
427+
rec.assertoutcome(passed=3)
418428

419429

420430
def test_parametrize_overrides_parametrized_fixture(self, testdir):

testing/python/fixture.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,6 +1598,22 @@ def test_result():
15981598
reprec = testdir.inline_run()
15991599
reprec.assertoutcome(passed=4)
16001600

1601+
def test_multiple_parametrization_issue_736(self, testdir):
1602+
testdir.makepyfile("""
1603+
import pytest
1604+
1605+
@pytest.fixture(params=[1,2,3])
1606+
def foo(request):
1607+
return request.param
1608+
1609+
@pytest.mark.parametrize('foobar', [4,5,6])
1610+
def test_issue(foo, foobar):
1611+
assert foo in [1,2,3]
1612+
assert foobar in [4,5,6]
1613+
""")
1614+
reprec = testdir.inline_run()
1615+
reprec.assertoutcome(passed=9)
1616+
16011617
def test_scope_session(self, testdir):
16021618
testdir.makepyfile("""
16031619
import pytest

0 commit comments

Comments
 (0)