Skip to content

Commit 574f7b2

Browse files
committed
Don't skip fixtures that are substrings of params
Fix #736
1 parent fd4d35d commit 574f7b2

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

_pytest/python.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1777,7 +1777,7 @@ def pytest_generate_tests(self, metafunc):
17771777
if fixturedef.params is not None:
17781778
func_params = getattr(getattr(metafunc.function, 'parametrize', None), 'args', [[None]])
17791779
# skip directly parametrized arguments
1780-
if argname not in func_params and argname not in func_params[0]:
1780+
if argname not in func_params:
17811781
metafunc.parametrize(argname, fixturedef.params,
17821782
indirect=True, scope=fixturedef.scope,
17831783
ids=fixturedef.ids)

testing/python/collect.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,18 @@ 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 value == 'overridden'
415424
""")
416425
rec = testdir.inline_run()
417-
rec.assertoutcome(passed=1)
426+
rec.assertoutcome(passed=3)
418427

419428

420429
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)