【发布时间】:2021-12-10 02:36:00
【问题描述】:
我有一个简单的应用程序,它创建一个小部件,并在其中创建一个 Env 对象。初始化 Env 对象需要大量外部调用,这对于我正在测试的函数来说是不必要的,所以我只想模拟整个对象(或 init)。但是,我想修补 get_parents 函数以返回特定数据进行测试。我不知道如何修补这个。这是我的课程:
env.py:
class Env(object):
def __init__(self):
# Lots of external calls that are not needed for
# this specific test
pass
def get_parents(self):
return ['moms']
widget.py
from env import Env
class Widget(object):
def __init__(self):
self.env = Env()
def display_parents(self):
return ','.join(self.env.get_parents())
我正在尝试设置测试来修补初始对象创建和我正在尝试修补的函数的返回值。这会模拟对象,但不会返回正确的值:
测试/test_widget.py
@patch('widget.Env.get_parents', return_value=['moms,pops'])
@patch('widget.Env')
def test_widget(mock_env, mock_get_parents):
widget = Widget()
assert widget.display_parents() == 'moms,pops' # Fails
我尝试以这种方式进行修补和模拟,但 get_parents 函数甚至没有被调用:
from widget import Widget
from unittest.mock import patch
@patch('widget.Env.get_parents', return_value=['moms,pops'])
@patch('widget.Env')
def test_widget(mock_env, mock_get_parents):
widget = Widget()
widget.display_parents()
assert mock_get_parents.called
【问题讨论】:
标签: python pytest python-unittest