Deprecate calling fixture functions directly
This will now issue a RemovedInPytest4Warning when the user calls a fixture function directly, instead of requesting it from test functions as is expected Fix #3661
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -263,3 +265,15 @@ def test_pytest_plugins_in_non_top_level_conftest_deprecated_no_false_positives(
|
||||
str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
|
||||
not in res.stderr.str()
|
||||
)
|
||||
|
||||
|
||||
# @pytest.mark.skipif(six.PY2, reason="We issue the warning in Python 3 only")
|
||||
def test_call_fixture_function_deprecated():
|
||||
"""Check if a warning is raised if a fixture function is called directly (#3661)"""
|
||||
|
||||
@pytest.fixture
|
||||
def fix():
|
||||
return 1
|
||||
|
||||
with pytest.deprecated_call():
|
||||
assert fix() == 1
|
||||
|
||||
7
testing/example_scripts/tmpdir/tmpdir_fixture.py
Normal file
7
testing/example_scripts/tmpdir/tmpdir_fixture.py
Normal file
@@ -0,0 +1,7 @@
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.mark.parametrize("a", [r"qwe/\abc"])
|
||||
def test_fixture(tmpdir, a):
|
||||
tmpdir.check(dir=1)
|
||||
assert tmpdir.listdir() == []
|
||||
@@ -1456,6 +1456,7 @@ class TestFixtureManagerParseFactories(object):
|
||||
testdir.makepyfile(
|
||||
"""
|
||||
import pytest
|
||||
import six
|
||||
|
||||
@pytest.fixture
|
||||
def hello(request):
|
||||
@@ -1468,9 +1469,11 @@ class TestFixtureManagerParseFactories(object):
|
||||
faclist = fm.getfixturedefs("hello", item.nodeid)
|
||||
print (faclist)
|
||||
assert len(faclist) == 3
|
||||
assert faclist[0].func(item._request) == "conftest"
|
||||
assert faclist[1].func(item._request) == "module"
|
||||
assert faclist[2].func(item._request) == "class"
|
||||
|
||||
kwargs = {'__being_called_by_pytest': True}
|
||||
assert faclist[0].func(item._request, **kwargs) == "conftest"
|
||||
assert faclist[1].func(item._request, **kwargs) == "module"
|
||||
assert faclist[2].func(item._request, **kwargs) == "class"
|
||||
"""
|
||||
)
|
||||
reprec = testdir.inline_run("-s")
|
||||
|
||||
@@ -12,7 +12,6 @@ from _pytest.assertion import truncate
|
||||
PY3 = sys.version_info >= (3, 0)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_config():
|
||||
class Config(object):
|
||||
verbose = False
|
||||
@@ -768,15 +767,15 @@ def test_rewritten(testdir):
|
||||
assert testdir.runpytest().ret == 0
|
||||
|
||||
|
||||
def test_reprcompare_notin(mock_config):
|
||||
detail = plugin.pytest_assertrepr_compare(
|
||||
mock_config, "not in", "foo", "aaafoobbb"
|
||||
)[1:]
|
||||
def test_reprcompare_notin():
|
||||
config = mock_config()
|
||||
detail = plugin.pytest_assertrepr_compare(config, "not in", "foo", "aaafoobbb")[1:]
|
||||
assert detail == ["'foo' is contained here:", " aaafoobbb", "? +++"]
|
||||
|
||||
|
||||
def test_reprcompare_whitespaces(mock_config):
|
||||
detail = plugin.pytest_assertrepr_compare(mock_config, "==", "\r\n", "\n")
|
||||
def test_reprcompare_whitespaces():
|
||||
config = mock_config()
|
||||
detail = plugin.pytest_assertrepr_compare(config, "==", "\r\n", "\n")
|
||||
assert detail == [
|
||||
r"'\r\n' == '\n'",
|
||||
r"Strings contain only whitespace, escaping them using repr()",
|
||||
|
||||
@@ -10,9 +10,7 @@ from _pytest.main import EXIT_NOTESTSCOLLECTED, EXIT_USAGEERROR
|
||||
|
||||
@pytest.fixture(scope="module", params=["global", "inpackage"])
|
||||
def basedir(request, tmpdir_factory):
|
||||
from _pytest.tmpdir import tmpdir
|
||||
|
||||
tmpdir = tmpdir(request, tmpdir_factory)
|
||||
tmpdir = tmpdir_factory.mktemp("basedir", numbered=True)
|
||||
tmpdir.ensure("adir/conftest.py").write("a=1 ; Directory = 3")
|
||||
tmpdir.ensure("adir/b/conftest.py").write("b=2 ; a = 1.5")
|
||||
if request.param == "inpackage":
|
||||
|
||||
@@ -3,35 +3,10 @@ import sys
|
||||
import py
|
||||
import pytest
|
||||
|
||||
from _pytest.tmpdir import tmpdir
|
||||
|
||||
|
||||
def test_funcarg(testdir):
|
||||
testdir.makepyfile(
|
||||
"""
|
||||
def pytest_generate_tests(metafunc):
|
||||
metafunc.addcall(id='a')
|
||||
metafunc.addcall(id='b')
|
||||
def test_func(tmpdir): pass
|
||||
"""
|
||||
)
|
||||
from _pytest.tmpdir import TempdirFactory
|
||||
|
||||
reprec = testdir.inline_run()
|
||||
calls = reprec.getcalls("pytest_runtest_setup")
|
||||
item = calls[0].item
|
||||
config = item.config
|
||||
tmpdirhandler = TempdirFactory(config)
|
||||
item._initrequest()
|
||||
p = tmpdir(item._request, tmpdirhandler)
|
||||
assert p.check()
|
||||
bn = p.basename.strip("0123456789")
|
||||
assert bn.endswith("test_func_a_")
|
||||
item.name = "qwe/\\abc"
|
||||
p = tmpdir(item._request, tmpdirhandler)
|
||||
assert p.check()
|
||||
bn = p.basename.strip("0123456789")
|
||||
assert bn == "qwe__abc"
|
||||
def test_tmpdir_fixture(testdir):
|
||||
results = testdir.run_example("tmpdir/tmpdir_fixture.py")
|
||||
results.stdout.fnmatch_lines("*1 passed*")
|
||||
|
||||
|
||||
def test_ensuretemp(recwarn):
|
||||
|
||||
Reference in New Issue
Block a user