我正在尝试在方法中模拟一个函数setUpClass()
,然后在方法中恢复该函数tearDownClass()
。
class MyClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.save_func = module.func
module.func = lambda: True
@classmethod
def tearDownClass(cls):
module.func = cls.save_func
在该tearDownClass()
方法之后,我预计调用module.func()
将调用实际函数。但事实并非如此。
我通过打印函数进行了一些调试。我从该tearDownClass()
方法中得到了以下输出。
cls.save_func: <unbound method MyClass.save_func>
module.func: <unbound method MyClass.save_func>
我正在尝试不同的事情,我将方法从类方法更改为设置方法:
def setUp(cls):
cls.save_func = module.func
module.func = lambda: True
def tearDown(cls):
module.func = cls.save_func
令我惊讶的是,一切似乎都在工作。module.func
恢复回来,当我打印它时,它给了我函数地址。
module.func <function func at 0x89f9a74>
你能解释一下这种行为吗?