我正在尝试使用pytest和monkeypatch对使用第三方数据集成包的方法进行单元测试。
下面是一些伪代码示例:
from third_party.data_integration import Account
def fetch_data():
account_id = "123"
account_token = "234"
account = Account(account_id, account_token)
account.download('path')
return True
我希望在测试文件中做一些打击,以猴子补丁download
实例函数:
def test_fetch_data(monkeypatch):
def download():
return '123'
with monkeypatch.context() as m:
m.setattr('third_party.data_integration.Account.download', download)
assert fetch_data() == True
很显然,m.setattr('third_party.data_integration.Account.download', download)
仅适用于静态方法,而不适用于实例方法或类方法。进行此类测试以修补第三方本机包实例方法的最佳实践是什么?
答案 0 :(得分:0)
由于您正在调用Account
类的构造函数,并且您要模拟的方法是该构造函数的返回值的属性,因此您需要模拟该构造函数的返回值,然后monkeypatch模拟的download
属性。
这是我要怎么做:
@mock.patch('third_party.data_integration.Account')
def test_fetch_data(mock_account):
def download():
return '123'
acc = MagicMock()
acc.download = download
mock_account.return_value = acc
assert fetch_data() == True