gpt4 book ai didi

python 在另一个方法中调用的方法的模拟返回值不起作用

转载 作者:行者123 更新时间:2023-11-30 22:45:38 24 4
gpt4 key购买 nike

我想模拟这样的单元测试方法:

get_tree_test.py

from company.marketing_tree import get_tree

class MidNightTests(TestCase):
@mock.patch("company.analytics.get_fb_data", autospec=True)
def test_first_midnight(self, mock_fb_data):
mock_fb_data.return_value = {}
get_tree()

get_tree.py

from company.analytics import get_fb_data

def get_tree():
executor = ThreadPoolExecutor(max_workers=2)
data_caller = executor.submit(get_data)
info_caller = executor.submit(get_info)

def get_data():
executor = ThreadPoolExecutor(max_workers=2)
first_data = exeuctor.submit(get_fb_data)

我确实看到 mock_fb_data.return_value = {} 被创建为模拟对象,但是当我调试 get_data() 方法时,我看到 get_fb_data 是一个函数,并且不是模拟

我错过了什么?

最佳答案

您需要修补正确的位置。在 get_tree 中,您创建了一个全局名称 get_fb_data,代码直接使用它:

from company.analytics import get_fb_data

您需要修补该名称,而不是原始的company.analytics.get_fb_data名称;修补的工作原理是替换名称以指向模拟:

class MidNightTests(TestCase):
@mock.patch("get_tree.get_fb_data", autospec=True)
def test_first_midnight(self, mock_fb_data):
mock_fb_data.return_value = {}
get_tree()

请参阅Where to patch section unittest.mock 文档。

关于python 在另一个方法中调用的方法的模拟返回值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41145396/

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