如何测试 python 私有方法(是的,我确实有理由测试它们)

dso*_*len 5 python unit-testing

我正在寻找为 python 私有方法编写单元测试的最干净的方法。

我知道通常您不想测试私有方法,但是我们继承了一个巨大的 python 文件,我们需要将其重构为更易于维护的模块。我们不明白它的逻辑,但知道它有效,因此希望使用 TDD 来确保我们的重构不会破坏代码,目前 90% 的代码位于私有方法中,并且模块做了太多完全通过黑盒测试进行可靠的测试。我完全希望我会写一些测试,一旦重构完成,这些测试就会被删除,但现在我希望能够插入一些私有方法来测试它们,以增加我对重构没有破坏关键逻辑的信心当我过渡到更易于维护(和可测试)的布局时。

Mac*_*j M 14

在python中,“私有”方法只是向开发人员表明它们应该是私有的,实际上您可以访问每个方法。当你用两个下划线开始一个方法名称时,Python 会使用一些“魔法”来使它更难访问。事实上,它不像其他语言那样强制执行任何操作。

假设我们有以下课程:

class Foo:
 def __bar(self, arg):
     print(arg)
 def baz(self, arg):
     self.__bar(arg)
Run Code Online (Sandbox Code Playgroud)

要访问“私有” __bar 方法,请尝试以下操作:

f = Foo()
f._Foo__bar('a')
Run Code Online (Sandbox Code Playgroud)

可以在文档中找到有关标识符的更多信息

希望这是你正在寻找的。