Change PytestRemovedIn8Warning to error by default
Per our backward compatibility policy.
This commit is contained in:
parent
57d352460c
commit
a4a189ad99
|
@ -0,0 +1,22 @@
|
|||
**PytestRemovedIn8Warning deprecation warnings are now errors by default.**
|
||||
|
||||
Following our plan to remove deprecated features with as little disruption as
|
||||
possible, all warnings of type ``PytestRemovedIn8Warning`` now generate errors
|
||||
instead of warning messages by default.
|
||||
|
||||
**The affected features will be effectively removed in pytest 8.1**, so please consult the
|
||||
:ref:`deprecations` section in the docs for directions on how to update existing code.
|
||||
|
||||
In the pytest ``8.0.X`` series, it is possible to change the errors back into warnings as a
|
||||
stopgap measure by adding this to your ``pytest.ini`` file:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[pytest]
|
||||
filterwarnings =
|
||||
ignore::pytest.PytestRemovedIn8Warning
|
||||
|
||||
But this will stop working when pytest ``8.1`` is released.
|
||||
|
||||
**If you have concerns** about the removal of a specific feature, please add a
|
||||
comment to :issue:`7363`.
|
|
@ -49,6 +49,8 @@ def catch_warnings_for_item(
|
|||
warnings.filterwarnings("always", category=DeprecationWarning)
|
||||
warnings.filterwarnings("always", category=PendingDeprecationWarning)
|
||||
|
||||
warnings.filterwarnings("error", category=pytest.PytestRemovedIn8Warning)
|
||||
|
||||
apply_warning_filters(config_filters, cmdline_filters)
|
||||
|
||||
# apply filters from "filterwarnings" marks
|
||||
|
|
|
@ -1164,7 +1164,6 @@ def test_usage_error_code(pytester: Pytester) -> None:
|
|||
assert result.ret == ExitCode.USAGE_ERROR
|
||||
|
||||
|
||||
@pytest.mark.filterwarnings("default::pytest.PytestUnhandledCoroutineWarning")
|
||||
def test_warn_on_async_function(pytester: Pytester) -> None:
|
||||
# In the below we .close() the coroutine only to avoid
|
||||
# "RuntimeWarning: coroutine 'test_2' was never awaited"
|
||||
|
@ -1181,7 +1180,7 @@ def test_warn_on_async_function(pytester: Pytester) -> None:
|
|||
return coro
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest()
|
||||
result = pytester.runpytest("-Wdefault")
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"test_async.py::test_1",
|
||||
|
@ -1197,7 +1196,6 @@ def test_warn_on_async_function(pytester: Pytester) -> None:
|
|||
)
|
||||
|
||||
|
||||
@pytest.mark.filterwarnings("default::pytest.PytestUnhandledCoroutineWarning")
|
||||
def test_warn_on_async_gen_function(pytester: Pytester) -> None:
|
||||
pytester.makepyfile(
|
||||
test_async="""
|
||||
|
@ -1209,7 +1207,7 @@ def test_warn_on_async_gen_function(pytester: Pytester) -> None:
|
|||
return test_2()
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest()
|
||||
result = pytester.runpytest("-Wdefault")
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"test_async.py::test_1",
|
||||
|
|
|
@ -103,7 +103,7 @@ def test_strict_option_is_deprecated(pytester: Pytester) -> None:
|
|||
def test_foo(): pass
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest("--strict")
|
||||
result = pytester.runpytest("--strict", "-Wdefault::pytest.PytestRemovedIn8Warning")
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"'unknown' not found in `markers` configuration option",
|
||||
|
@ -189,7 +189,7 @@ class TestSkipMsgArgumentDeprecated:
|
|||
pytest.skip(msg="skippedmsg")
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest(p)
|
||||
result = pytester.runpytest(p, "-Wdefault::pytest.PytestRemovedIn8Warning")
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"*PytestRemovedIn8Warning: pytest.skip(msg=...) is now deprecated, "
|
||||
|
@ -208,7 +208,7 @@ class TestSkipMsgArgumentDeprecated:
|
|||
pytest.fail(msg="failedmsg")
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest(p)
|
||||
result = pytester.runpytest(p, "-Wdefault::pytest.PytestRemovedIn8Warning")
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"*PytestRemovedIn8Warning: pytest.fail(msg=...) is now deprecated, "
|
||||
|
@ -227,7 +227,7 @@ class TestSkipMsgArgumentDeprecated:
|
|||
pytest.exit(msg="exitmsg")
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest(p)
|
||||
result = pytester.runpytest(p, "-Wdefault::pytest.PytestRemovedIn8Warning")
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"*PytestRemovedIn8Warning: pytest.exit(msg=...) is now deprecated, "
|
||||
|
@ -245,7 +245,7 @@ def test_deprecation_of_cmdline_preparse(pytester: Pytester) -> None:
|
|||
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest()
|
||||
result = pytester.runpytest("-Wdefault::pytest.PytestRemovedIn8Warning")
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"*PytestRemovedIn8Warning: The pytest_cmdline_preparse hook is deprecated*",
|
||||
|
@ -299,7 +299,7 @@ def test_nose_deprecated_with_setup(pytester: Pytester) -> None:
|
|||
...
|
||||
"""
|
||||
)
|
||||
output = pytester.runpytest()
|
||||
output = pytester.runpytest("-Wdefault::pytest.PytestRemovedIn8Warning")
|
||||
message = [
|
||||
"*PytestRemovedIn8Warning: Support for nose tests is deprecated and will be removed in a future release.",
|
||||
"*test_nose_deprecated_with_setup.py::test_omits_warnings is using nose method: `setup_fn_no_op` (setup)",
|
||||
|
@ -327,7 +327,7 @@ def test_nose_deprecated_setup_teardown(pytester: Pytester) -> None:
|
|||
...
|
||||
"""
|
||||
)
|
||||
output = pytester.runpytest()
|
||||
output = pytester.runpytest("-Wdefault::pytest.PytestRemovedIn8Warning")
|
||||
message = [
|
||||
"*PytestRemovedIn8Warning: Support for nose tests is deprecated and will be removed in a future release.",
|
||||
"*test_nose_deprecated_setup_teardown.py::Test::test is using nose-specific method: `setup(self)`",
|
||||
|
|
|
@ -1184,7 +1184,7 @@ def test_cmdline_processargs_simple(pytester: Pytester) -> None:
|
|||
args.append("-h")
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest()
|
||||
result = pytester.runpytest("-Wignore::pytest.PytestRemovedIn8Warning")
|
||||
result.stdout.fnmatch_lines(["*pytest*", "*-h*"])
|
||||
|
||||
|
||||
|
|
|
@ -23,7 +23,9 @@ def test_nose_setup(pytester: Pytester) -> None:
|
|||
test_hello.teardown = lambda: values.append(2)
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest(p, "-p", "nose")
|
||||
result = pytester.runpytest(
|
||||
p, "-p", "nose", "-Wignore::pytest.PytestRemovedIn8Warning"
|
||||
)
|
||||
result.assert_outcomes(passed=2)
|
||||
|
||||
|
||||
|
@ -76,7 +78,9 @@ def test_nose_setup_func(pytester: Pytester) -> None:
|
|||
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest(p, "-p", "nose")
|
||||
result = pytester.runpytest(
|
||||
p, "-p", "nose", "-Wignore::pytest.PytestRemovedIn8Warning"
|
||||
)
|
||||
result.assert_outcomes(passed=2)
|
||||
|
||||
|
||||
|
@ -100,7 +104,9 @@ def test_nose_setup_func_failure(pytester: Pytester) -> None:
|
|||
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest(p, "-p", "nose")
|
||||
result = pytester.runpytest(
|
||||
p, "-p", "nose", "-Wignore::pytest.PytestRemovedIn8Warning"
|
||||
)
|
||||
result.stdout.fnmatch_lines(["*TypeError: <lambda>()*"])
|
||||
|
||||
|
||||
|
@ -154,7 +160,9 @@ def test_nose_setup_partial(pytester: Pytester) -> None:
|
|||
test_hello.teardown = my_teardown_partial
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest(p, "-p", "nose")
|
||||
result = pytester.runpytest(
|
||||
p, "-p", "nose", "-Wignore::pytest.PytestRemovedIn8Warning"
|
||||
)
|
||||
result.stdout.fnmatch_lines(["*2 passed*"])
|
||||
|
||||
|
||||
|
@ -193,7 +201,9 @@ def test_module_level_setup(pytester: Pytester) -> None:
|
|||
assert items["setup2"] == ["up", "down", "up"]
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest("-p", "nose")
|
||||
result = pytester.runpytest(
|
||||
"-p", "nose", "-Wignore::pytest.PytestRemovedIn8Warning"
|
||||
)
|
||||
result.stdout.fnmatch_lines(["*4 passed*"])
|
||||
|
||||
|
||||
|
@ -278,7 +288,7 @@ def test_nose_setup_ordering(pytester: Pytester) -> None:
|
|||
assert self.visited_cls
|
||||
"""
|
||||
)
|
||||
result = pytester.runpytest()
|
||||
result = pytester.runpytest("-Wignore::pytest.PytestRemovedIn8Warning")
|
||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
||||
|
||||
|
||||
|
|
|
@ -518,7 +518,8 @@ class TestDeprecationWarningsByDefault:
|
|||
assert WARNINGS_SUMMARY_HEADER not in result.stdout.str()
|
||||
|
||||
|
||||
@pytest.mark.skip("not relevant until pytest 8.0")
|
||||
# In 8.1, uncomment below and change RemovedIn8 -> RemovedIn9.
|
||||
# @pytest.mark.skip("not relevant until pytest 9.0")
|
||||
@pytest.mark.parametrize("change_default", [None, "ini", "cmdline"])
|
||||
def test_removed_in_x_warning_as_error(pytester: Pytester, change_default) -> None:
|
||||
"""This ensures that PytestRemovedInXWarnings raised by pytest are turned into errors.
|
||||
|
|
Loading…
Reference in New Issue