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):
|
||||
case_sensitive = kwargs.pop('case_sensitive', self.case_sensitive)
|
||||
self._adapter = adapter.Adapter(case_sensitive=case_sensitive)
|
||||
self.case_sensitive = kwargs.pop('case_sensitive', self.case_sensitive)
|
||||
self._adapter = adapter.Adapter(case_sensitive=self.case_sensitive)
|
||||
|
||||
self._real_http = kwargs.pop('real_http', False)
|
||||
self._last_send = None
|
||||
@ -198,7 +198,8 @@ class Mocker(MockerCore):
|
||||
"""
|
||||
m = Mocker(
|
||||
kw=self._kw,
|
||||
real_http=self._real_http
|
||||
real_http=self._real_http,
|
||||
case_sensitive=self.case_sensitive
|
||||
)
|
||||
return m
|
||||
|
||||
@ -209,7 +210,7 @@ class Mocker(MockerCore):
|
||||
"""
|
||||
@functools.wraps(func)
|
||||
def inner(*args, **kwargs):
|
||||
with self as m:
|
||||
with self.copy() as m:
|
||||
if self._kw:
|
||||
kwargs[self._kw] = m
|
||||
else:
|
||||
|
@ -92,6 +92,21 @@ class MockerTests(base.TestCase):
|
||||
inner()
|
||||
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):
|
||||
outer = self
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user