如何修补对象中的属性

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)

  • 实际上,您链接到的文档使用“patch”,而不是“patch.object”。从该文档中并不清楚何时应使用“patch”与“patch.object”。 (2认同)

Bri*_*hez 6

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