Python:как вы тестируете вложенную функцию? [дубликат]

этот вопрос уже есть ответ здесь:

как бы вы проверили вложенную функцию F1() в следующем примере?

def f():
    def f1():
       return 1
    return 2

или функции, которые нуждаются в тестировании, не должны быть вложенными?

3 ответов


есть аналогичный вопрос в этой ссылке. Но короткий ответ: вы не можете получить доступ к внутренней функции из внешнего элемента.

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


вы не можете, потому что не можете.

вам придется либо ограничить модульное тестирование внешней функцией, либо переместить внутреннюю функцию в другое место.


у меня были те же сомнения и я нашел способ получить тесты для внутренних функций.

def outer():
    def inner():
        pass

    if __debug__:
        test_inner(inner)
        # return

def test_inner(f):
    f() # this calls the inner function

outer()

в основном вы можете отправить внутреннюю функцию в качестве параметра наружу и проверить ее по своему желанию. При вызове outer () ваш тест будет запущен, и поскольку он является закрытием, он сохранит любое дополнительное свойство из внешней функции (например, переменные). Используя список, вы можете отправить столько функций, сколько вы хотите. Игнорировать если параметр, чтобы запустить код что:

python -O code.py