如何使用Python3、pytest及unittest测试嵌套函数中的内部函数?
如何测试Python函数内部的嵌套函数?
嘿,这个问题我之前在项目里也碰到过!Python里的嵌套函数(比如你说的parent里的child)默认是对外隐藏的,不过有几种实用的方法能搞定它,我给你详细说说:
方法1:让外部函数返回嵌套函数
最简单的方式就是修改parent函数,让它把内部的child函数返回出来。这样你就能直接拿到child进行测试了,代码示例如下:
原代码修改:
def parent(): def child(): return "Hello from child!" # 添加返回语句,暴露child函数 return child
测试代码(用pytest为例):
def test_child_function(): # 获取内部的child函数 child = parent() # 测试child的返回值 assert child() == "Hello from child!"
方法2:用inspect模块提取嵌套函数
如果你不想修改原有的parent函数代码,可以用Python标准库的inspect模块来直接提取内部的child函数。这种方法更适合不能改动原代码的场景:
测试代码(pytest/unittest都适用):
import inspect def parent(): def child(): return "Hello from child!" # 假设parent里还有其他逻辑 return "Hello from parent!" def test_child_with_inspect(): # 获取parent函数内的所有函数成员 inner_functions = inspect.getmembers(parent, inspect.isfunction) # 找到名为child的函数 child = next(func for name, func in inner_functions if name == "child") # 执行测试 assert child() == "Hello from child!"
方法3:间接测试嵌套函数的行为
如果上面两种方法都不适合(比如child是parent内部私有的逻辑,不想暴露),那可以通过测试parent的整体行为来间接验证child是否正常工作。比如如果parent会调用child并使用它的返回值,那我们可以通过断言parent的输出是否符合预期来间接测试child:
示例代码:
def parent(): def child(): return 5 # parent调用child并计算结果 result = child() * 2 return result def test_parent_indirectly(): # 通过测试parent的返回值,间接验证child的逻辑是否正确 assert parent() == 10
内容的提问来源于stack exchange,提问作者Xar
相关产品推荐
相关产品推荐

