修补:用另一个替换方法调用

时间:2011-10-24 17:23:07

标签: python unit-testing patch

我使用Python的模拟框架进行测试 - 效果很好! 但是,我无法弄清楚的一件事是如何修补一个函数,以便用另一个函数替换调用。

示例:

# module_A.py
def original_func(arg_a,arg_b):
    # ...

# module_B.py
import module_A

def func_under_test():
    # ...
    module_A.original_func(a,b)
    # Some code that depends on the behavior of the patched function
    # ...

# my test code
def alternative_func(arg_a,arg_b):
    # do something essential for the test

def the_test():
    # patch the original_func with the alternative_func here
    func_under_test()
    # assertions

通常断言就足够了,但在这种情况下,我需要alternative_func在调用它时启动而不是original_func

另请注意alternative_func需要相同的参数。

我确信它非常简单,而且可能是时间已晚,但我只是看不到它......

3 个答案:

答案 0 :(得分:4)

在您的测试import module_A顶部,然后在您的设置功能中使用:

module_A.original_func = alternative_func

答案 1 :(得分:1)

您需要保存原始功能,以便在完成测试功能后可以恢复:

import module_a

def the_test():
    orig_func = module_a.original_func
    module_a.original_func = alternative_func

    # do testing stuff

    # then restore original func for other tests
    module_a.original_func = orig_func

答案 2 :(得分:0)

您可以重新指定原件以指向新的

original_func = alternative_func

然后调用original将实际调用替代