无法修补功能的功能
Trouble patching a function of a function
我对打补丁还很陌生,我 运行 遇到了一些我不知道如何打补丁的问题。基本上,在我要测试的文件中,有方法 difficult_method()
。它看起来有点像这样:
from import_location import User
def difficult_method():
ids = list_of_ids
for id in list_of_ids:
try:
user = User.query.filter(User.id == user_id).all()[0]
except:
continue
#do lots of stuff
我想模拟的代码是 User.query.filter(User.id == user_id).all()
,据我所知,它可以 return 一个静态列表。我将如何替换看起来像这样的代码中的那一行:
from mock import patch
@patch(#what would go here?)
def test_difficult_method():
from file_to_test import difficult_method
assert difficult_method() returns ...
我想通了!关键是创建一个 MockUser class,像这样:
user = #creating a user
class MockFilter(object):
def all(self):
return [user]
class MockQuery(object):
def filter(self, match):
return MockFilter()
class MockUser(object):
query = MockQuery()
id = '2'
然后我像这样修补它:
from mock import patch
@patch('import_location.User', MockUser)
def test_difficult_method():
from file_to_test import difficult_method
assert difficult_method() returns ...
我对打补丁还很陌生,我 运行 遇到了一些我不知道如何打补丁的问题。基本上,在我要测试的文件中,有方法 difficult_method()
。它看起来有点像这样:
from import_location import User
def difficult_method():
ids = list_of_ids
for id in list_of_ids:
try:
user = User.query.filter(User.id == user_id).all()[0]
except:
continue
#do lots of stuff
我想模拟的代码是 User.query.filter(User.id == user_id).all()
,据我所知,它可以 return 一个静态列表。我将如何替换看起来像这样的代码中的那一行:
from mock import patch
@patch(#what would go here?)
def test_difficult_method():
from file_to_test import difficult_method
assert difficult_method() returns ...
我想通了!关键是创建一个 MockUser class,像这样:
user = #creating a user
class MockFilter(object):
def all(self):
return [user]
class MockQuery(object):
def filter(self, match):
return MockFilter()
class MockUser(object):
query = MockQuery()
id = '2'
然后我像这样修补它:
from mock import patch
@patch('import_location.User', MockUser)
def test_difficult_method():
from file_to_test import difficult_method
assert difficult_method() returns ...