Mem*_*mke 10 python unit-testing mocking
问题是如何在with
语句中修补实例的属性.我尝试使用以下不起作用的示例.它在评论中打印.
from mock import patch, PropertyMock
class Foo(object):
f = {'a': 1}
new_foo = Foo()
with patch.object(new_foo, 'f', new_callable=PropertyMock) as mock:
mock.return_value = {'b': 2}
print new_foo.f
# <PropertyMock name='f' id='4474801232'>
Run Code Online (Sandbox Code Playgroud)
Sil*_*eed 19
文档中有一个例子.您需要为patch.object提供类,而不是实例化的对象.
from mock import patch, PropertyMock
class Foo(object):
f = {'a': 1}
new_foo = Foo()
with patch.object(Foo, 'f', new_callable=PropertyMock) as mock:
mock.return_value = {'b': 2}
print new_foo.f
print new_foo.f
Run Code Online (Sandbox Code Playgroud)
输出:
{'b': 2}
{'a': 1}
Run Code Online (Sandbox Code Playgroud)
config.py
class myClass(object):
def __init__(self):
self.greeting = "hola"
Run Code Online (Sandbox Code Playgroud)
test_first_test.py
from config import myClass
@patch.object(myClass, "greeting", "what up homie")
def test_one(self):
print(myClass.greeting)
Run Code Online (Sandbox Code Playgroud)
输出:
what up homie