如何对嵌套函数进行单元测试?

23

以下示例中,您如何对嵌套函数f1()进行单元测试?

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

或者说需要测试的函数不应该嵌套吗?


我会将其作为答案返回 :) - alemangui
3个回答

14

这个问题在这个链接中有类似的提问。但简短地回答:您无法从外部元素访问内部函数。

为了测试目的,也许一个替代方案是将内部函数更改为私有的外部函数?


11
你不能这样做,因为你做不到。
你必须要么将单元测试限制在外部函数中,要么将内部函数移动到别处。

1

我曾经有同样的疑问,并找到了一种方法来测试内部函数。

def outer():
    def inner():
        pass

    if __debug__:
        test_inner(inner)
        # return

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

outer()

基本上,您可以将内部函数作为参数发送到外部并根据需要进行测试。调用outer()时,您的测试将运行,并且由于它是闭包,它将保留来自外部函数的任何额外属性(如变量)。使用列表,您可以发送任意数量的函数。要忽略if,一个选项是这样运行代码:
python -O code.py

这是一个非常特殊的解决方案。考虑在循环内部嵌套函数,访问外部函数的局部变量(这是嵌套函数更常见的用例,在我看来)。 - Alfe
这是一个好的实践吗? - cheese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接