如何用Python中的模拟对象替换函数的所有引用?
我试图为Fabric脚本编写一些单元测试。具体来说,我想将fabric.api.run
替换为记录命令而不是执行的模拟版本。但是,我想以某种方式执行此操作,因此我不必重写所有引用结构的代码。
我已经尝试过:
import fabric.api
_run = fabric.api.run
fabric.api.run = my_mock_run_function
但由于我无法保证在任何其他模块导入fabric.api之前会运行,因此很多代码仍在使用真正的run
函数。
答案 0 :(得分:1)
如果您的代码使用:
.ipa
你必须修补你的模块对run函数的本地引用:
with open("scores.txt", "a") as file:
file.write("%s, %s\n" % (name, number_correct))
with open("scores.txt", "r") as file:
data = [line.split(", ") for line in file.read().split("\n")]
data = sorted(data, key = lambda x: -int(x[1]))
print("\n".join(["%s\t%s" % (i[0], i[1]) for i in data]))
如果您的代码使用:
from fabric.api import run
您将能够修补原始副本:
@patch('yourmodule.run')
def test_method(self, run):
pass
答案 1 :(得分:0)
import fabric.api
import unittest
from unittest.mock import Mock, patch
class TestCases(unittest.TestCase):
@patch('fabric.api.run')
def test_test(self):
self.assertTrue(True)