gpt4 book ai didi

python - 如何在 Python 中模拟实例方法

转载 作者:行者123 更新时间:2023-11-28 18:58:44 34 4
gpt4 key购买 nike

我正在尝试测试一个类并模拟其方法之一,但我似乎无法用我的模拟行为替换其中一个实例方法的行为。我的代码是这样组织的:


--src
----module
------__init__.py
------my_class.py
--tst
----__init__.py
----test_my_class.py

my_class.py包含以下内容

class MyClass:

def __init__(self):
pass

def do_something(self):
return 'Real Output'

我的测试文件test_my_class.py包含以下内容。

from unittest.mock import patch
from src.module.my_class import MyClass

def test_my_class():
my_class = MyClass()
assert my_class.do_something() == 'Real Output'

@patch('src.module.my_class.MyClass')
def test_mock_my_class(mock_my_class):
mock_my_class.return_value.do_something.return_value = 'Mocked Output'
my_class = MyClass()
assert my_class.do_something() == 'Mocked Output'

第一个测试工作正常(到目前为止没有涉及模拟)。然而,第二个测试给了我以下断言错误。我期待 do_something()方法被模拟并返回“模拟输出”,以及断言语句评估为真。我哪里出错了?

AssertionError: assert <bound method MyClass.do_something of <src.module.my_class.MyClass object at 0x1057133c8>> == 'Mocked Output'
E + where <bound method MyClass.do_something of <src.module.my_class.MyClass object at 0x1057133c8>> = <src.module.my_class.MyClass object at 0x1057133c8>.do_something

附言。我咨询了以下资源但没有成功:

最后一个链接起初看起来特别有用,因为我几乎逐字逐句地遵循了其中一个示例,但它仍然不起作用。

@mock.patch("simple.SimpleClass")
def mock_simple_class(mock_class):
mock_class.return_value.explode.return_value = "BOO!"
inst = simple.SimpleClass()
result = inst.explode()
print(result)

最佳答案

解决这个问题的更合适的方法是使用 patch.object

@patch.object(MyClass, "do_something")
def test_mock_my_class(m):
m.side_effect = ['Mocked Output']
my_class = MyClass()
assert my_class.do_something() == 'Mocked Output'

关于python - 如何在 Python 中模拟实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55172201/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com