Asserting deprecation and other warnings

The recwarn function argument

You can use the recwarn funcarg to assert that code triggers warnings through the Python warnings system. Here is a simple self-contained test:

# content of
def test_hello(recwarn):
    from warnings import warn
    warn("hello", DeprecationWarning)
    w = recwarn.pop(DeprecationWarning)
    assert issubclass(w.category, DeprecationWarning)
    assert 'hello' in str(w.message)
    assert w.filename
    assert w.lineno

The recwarn function argument provides these methods:

  • pop(category=None): return last warning matching the category.
  • clear(): clear list of warnings

Ensuring a function triggers a deprecation warning

You can also call a global helper for checking that a certain function call triggers a Deprecation warning:

import pytest

def test_global():
    pytest.deprecated_call(myfunction, 17)