unittest.TestCase.assertRaisesRegex throws DeprecationWarning
Peter Otten
__peter__ at web.de
Tue Jul 31 18:56:53 EDT 2018
Uri Even-Chen wrote:
> Hi,
>
> We are using unittest.TestCase.assertRaisesRegex in our Django project
> (Speedy Net / Speedy Match - https://github.com/urievenchen/speedy-net),
> and I always prefer calling Python function parameters by name. So we call
> self.assertRaisesRegex with parameters (keyword arguments)
> expected_exception, expected_regex and callable - as documented on
>
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex
> . You can see our code on
> https://github.com/urievenchen/speedy-net/blob/master/speedy/core/accounts/tests/test_models.py
> . When I run tests regularly (with "./manage.py test") they pass, But when
> I run tests with "python -W error::DeprecationWarning manage.py test",
> (with Python 3.5.5), I receive errors like this:
>
> DeprecationWarning: 'callable' is an invalid keyword argument for this
> function
>
> See the full errors here:
> https://travis-ci.org/urievenchen/speedy-net/jobs/410482655 (by the way,
> with Python 3.4.6 the tests pass).
No, the function to be tested is not run at all (it looks like callable was
called callable_obj back then):
$ cat unittest_regex.py
import unittest
def foo(*args, **kw):
print("RUNNING FOO")
class T(unittest.TestCase):
def test_baz(self):
self.assertRaisesRegex(
expected_exception=ValueError,
expected_regex="bar",
callable=foo
)
if __name__ == "__main__":
unittest.main()
$ python3.4 unittest_regex.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
> Do you know what is the problem and why I receive these deprecation
> warnings?
Apparently they want you to use the context manager ;)
Like
with self.assertRaisesRegex(ValueError, "bar"):
foo()
Clean, readable, robust -- but no keyword args.
More information about the Python-list
mailing list