gpt4 book ai didi

python - 在 Python 中模拟方法调用

转载 作者:太空狗 更新时间:2023-10-29 22:14:59 24 4
gpt4 key购买 nike

我一直在堆栈交换和网络上搜索如何执行此操作,但我无法理解如何模拟方法的行为。我正在尝试为我的自定义类模拟 openpyxl 行为和行为。这是我的尝试:

import unittest
from unittest.mock import MagicMock
import openpyxl
from MyPythonFile import MyClass

class TestMyClass(unittest.TestCase):
def test_myclass(self):
myclass = MyClass()
wb = openpyxl.workbook()
ws = openpyxl.worksheet()
wbPath = 'wbPath'

openpyxl.load_workbook(wbPath, data_only = True) = MagicMock(return_value=wb)

当我尝试最后一行时,出现错误“无法分配给函数调用”。我需要使用 patch.object('openpyxl','load_workbook') 吗?我习惯于使用 Groovy 在 Java 中进行模拟,这非常简单。

*编辑:想根据@alxwrd 的回复添加测试的最终版本

import unittest
from unittest.mock import MagicMock
import openpyxl
import configparser
from MyPythonFile import MyClass

class TestMyClass(unittest.TestCase):
def test_myclass(self):
myclass = MyClass()
wb = openpyxl.workbook()
ws = openpyxl.worksheet()
config = configparser.ConfigParser()

openpyxl.load_workbook = MagicMock(return_value=wb)
wb.get_sheet_by_name = MagicMock(return_value=ws)

config.sections() = MagicMock(return_value=['Section1'])
config.get = MagicMock(side_effect=['Value1','Value2'])

请注意,config.get 会通过 side_effect 参数给出多个返回值,因此如果在代码中调用一次 config.get(),它会返回 'Value1' 并且当config.get() 被第二次调用,它返回 'Value2'

最佳答案

您不能覆盖函数调用,但可以覆盖函数本身。

来自docs :

>>> from unittest.mock import MagicMock
>>> thing = ProductionClass()
>>> thing.method = MagicMock(return_value=3)
>>> thing.method(3, 4, 5, key='value')
3
>>> thing.method.assert_called_with(3, 4, 5, key='value')

所以在你的情况下:

openpyxl.load_workbook = MagicMock(return_value=wb)

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

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