【发布时间】:2017-04-29 18:04:32
【问题描述】:
我无法用 TestClass 替换来自不同模块的 python 函数
我正在尝试测试包含模块中函数的部分代码;更多细节我想猴子补丁这个功能。
所以,情况类似如下:
模块中的功能
def function_in_module():
# do some stuff
return 'ok'
我想要测试的部分代码
from dir_1.dir_2.dir_3.module_name import function_in_module
class ExampleClass():
def __init__(self):
# do some stuff
self.var_x = function_in_module()
# do some stuff again
测试类
from dir_1.dir_2.dir_3 import module_name
class TestClass(TestCase):
de_monkey = {}
mp = None
def setUp(self):
# save original one
self.de_monkey['function_in_module'] = module_name.function_in_module()
if self.mp is None:
self.mp = MP()
def tearDown(self):
# rollback at the end
module_name.function_in_module = self.de_monkey['function_in_module']
def test_string(self):
module_name.function_in_module = self.mp.monkey_function_in_module
test_obj = ExampleClass()
self.assertEqual(test_obj.var_x, 'not ok')
class MP(object):
@staticmethod
def monkey_function_in_module(self):
return 'not ok'
正如 assert 语句所示,预期的结果是 'not ok',但结果是 'ok'。
我对此进行了调试,似乎调用函数的方式不同是因为这个猴子补丁不起作用。
其实如果我尝试这样调用ExampleClass中的函数
self.var_x = module_name.function_in_module()
工作正常。
我错过了什么?也许这是一种平庸,但它让我发疯了
提前谢谢你
【问题讨论】:
标签: python python-2.7 unit-testing monkeypatching