在Python中,如何访问函数内部内联函数(意图:进行单元测试)?

在Python中,如何访问函数内部内联函数(意图:进行单元测试)?,python,unit-testing,Python,Unit Testing,我有一个python代码体,其中包含函数中的内联函数。我想对make\u激动人心的内部函数进行单元测试,所以我试图找出如何直接调用它 def say_something_exciting(name, phrase): def make_exciting(phrase): return phrase + "!" return "%s says '%s'" % (name, make_exciting(phrase)) 函数say\u something\u写在.p

我有一个python代码体,其中包含函数中的内联函数。我想对
make\u激动人心的内部函数进行单元测试,所以我试图找出如何直接调用它

def say_something_exciting(name, phrase):
    def make_exciting(phrase):
        return phrase + "!"
    return "%s says '%s'" % (name, make_exciting(phrase))
函数
say\u something\u
写在.py文件的顶层,不在类中。py文件位于
org.something
模块中。尝试:

  • 通过
    org.something.say_something.make_rectiming(“Hello”)
    直接调用函数-错误:“function”对象没有属性“make_rectiming”
  • 检查
    dir(org.something.say_something)
    org.something.say_something.\u dict__
    任何要遍历的路径,都没有看到
    make_something
  • internal\u function=org.something.say\u something.\uu dict\uuu.get('make\u sticing')
    ,但是
    internal\u function
    None
我如何访问(单元测试)这个内部函数?可能暗示我的要求是不可能的。我通常熟悉单元测试以及如何使用
unittest
模块;访问函数是个问题。如果不可能,我应该如何重新编写此代码以支持测试(如果不是将内部函数升级为顶级函数)?。谢谢

更新:在Java中,我经常为类方法提供默认的/包可见性,这样它们就不那么显眼了,但仍然可以被单元测试访问,寻找一个与python等价的方法。

我认为您不能

您需要返回内部函数,或将其绑定到其他位置。但是它变得很难看。可以从函数内部将声明的函数绑定到其他位置:

import testmodule
testmodule.testfunc = make_exciting

或者,您可以返回它,例如,当给定关键字参数时,例如export=True。

为什么需要单独测试它?您实际上想做什么?这看起来像一个人造的例子;如果不是,则删除内部函数,只需执行
def say_something_(名称,短语):返回“%s says'%s'”(名称,短语+!)
。这是一个虚构的示例(也是我的第一篇文章!多么有趣)。为了便于讨论,让我们假设我不能重写代码来删除内部函数。否则这也是我的第一个想法@CyphaseI不明白为什么会这样,但如果是这样,正如,@PeterWood所问的,为什么你需要单独测试它?我试图理解什么是可能的,这样我就可以调整我的编码风格来支持测试。在Java中,我经常为方法提供默认可见性,这样它们就不那么显眼,但仍然可以被测试访问——这里似乎没有类似之处。可能需要注意的是:如果它是一个需要独立测试的“单元”,那么它根本就不是一个内部细节,应该公开并“标准地”测试。通过修改它并将其耦合到某个全局引用来公开私有函数?我同意这很混乱。我想知道是否可以在不修改的情况下测试这个函数。是的,这是你唯一的赌注。除非您想使用meta并将函数定义提取为字符串,否则请为unittest内联编译它并使用它。。。