bpo-41403: Improve error message for invalid mock target (GH-30833) (GH-30835)

(cherry picked from commit f7955a82e3)
This commit is contained in:
Irit Katriel 2022-01-23 19:35:15 +00:00 committed by GitHub
parent 94d6434ba7
commit 1398dca838
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 5 deletions

View file

@ -1557,9 +1557,9 @@ def stop(self):
def _get_target(target):
try:
target, attribute = target.rsplit('.', 1)
except (TypeError, ValueError):
raise TypeError("Need a valid target to patch. You supplied: %r" %
(target,))
except (TypeError, ValueError, AttributeError):
raise TypeError(
f"Need a valid target to patch. You supplied: {target!r}")
getter = lambda: _importer(target)
return getter, attribute

View file

@ -1933,8 +1933,13 @@ def test(mock):
def test_invalid_target(self):
with self.assertRaises(TypeError):
patch('')
class Foo:
pass
for target in ['', 12, Foo()]:
with self.subTest(target=target):
with self.assertRaises(TypeError):
patch(target)
def test_cant_set_kwargs_when_passing_a_mock(self):

View file

@ -0,0 +1,3 @@
Make :meth:`mock.patch` raise a :exc:`TypeError` with a relevant error
message on invalid arg. Previously it allowed a cryptic
:exc:`AttributeError` to escape.