Return a separate copy for each call to decorator
Similar to decorating a class, should create a separate mock copy otherwise it acts as a caching decorator and any mock responses added on each call will be present for subsequent calls. Change-Id: Iabd70aa457ceb4dbc147d7cbaeec913148cb3b56
This commit is contained in:
parent
fcc640f495
commit
d59b584d88
@ -61,8 +61,8 @@ class MockerCore(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
case_sensitive = kwargs.pop('case_sensitive', self.case_sensitive)
|
self.case_sensitive = kwargs.pop('case_sensitive', self.case_sensitive)
|
||||||
self._adapter = adapter.Adapter(case_sensitive=case_sensitive)
|
self._adapter = adapter.Adapter(case_sensitive=self.case_sensitive)
|
||||||
|
|
||||||
self._real_http = kwargs.pop('real_http', False)
|
self._real_http = kwargs.pop('real_http', False)
|
||||||
self._last_send = None
|
self._last_send = None
|
||||||
@ -198,7 +198,8 @@ class Mocker(MockerCore):
|
|||||||
"""
|
"""
|
||||||
m = Mocker(
|
m = Mocker(
|
||||||
kw=self._kw,
|
kw=self._kw,
|
||||||
real_http=self._real_http
|
real_http=self._real_http,
|
||||||
|
case_sensitive=self.case_sensitive
|
||||||
)
|
)
|
||||||
return m
|
return m
|
||||||
|
|
||||||
@ -209,7 +210,7 @@ class Mocker(MockerCore):
|
|||||||
"""
|
"""
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
def inner(*args, **kwargs):
|
def inner(*args, **kwargs):
|
||||||
with self as m:
|
with self.copy() as m:
|
||||||
if self._kw:
|
if self._kw:
|
||||||
kwargs[self._kw] = m
|
kwargs[self._kw] = m
|
||||||
else:
|
else:
|
||||||
|
@ -92,6 +92,21 @@ class MockerTests(base.TestCase):
|
|||||||
inner()
|
inner()
|
||||||
self.assertMockStopped()
|
self.assertMockStopped()
|
||||||
|
|
||||||
|
def test_with_decorator_called_multiple_times(self):
|
||||||
|
|
||||||
|
@requests_mock.Mocker()
|
||||||
|
def inner(arg1, m):
|
||||||
|
self._do_test(m)
|
||||||
|
self.assertEquals(
|
||||||
|
len(m.request_history), 1,
|
||||||
|
"Failed to provide clean mock on subsequent calls"
|
||||||
|
)
|
||||||
|
|
||||||
|
inner('a')
|
||||||
|
# if we call the same decorated method again should get
|
||||||
|
# a new request mock
|
||||||
|
inner('b')
|
||||||
|
|
||||||
def test_with_class_decorator(self):
|
def test_with_class_decorator(self):
|
||||||
outer = self
|
outer = self
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user