Исправление: замена вызова метода другим - PullRequest
2 голосов
/ 24 октября 2011

Я использую фреймворк 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 ]

4 голосов
/ 24 октября 2011

в вашем тесте import module_A вверху и затем в вашей функции настройки используйте:

module_A.original_func = alternative_func
1 голос
/ 24 октября 2011

Вам нужно сохранить исходную функцию, чтобы вы могли восстановить ее после завершения работы с тестовой функцией:

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
0 голосов
/ 24 октября 2011

Вы можете переназначить оригинал, чтобы он указывал на новый

original_func = alternative_func

Тогда вызов оригинала вызовет альтернативу

...