【问题标题】:How can I test a Python private method (yes, I do have reason to test them)?如何测试 Python 私有方法(是的,我确实有理由测试它们)?
【发布时间】:2018-11-27 14:40:34
【问题描述】:

我正在寻找为 Python 私有方法编写 unit tests 的最简洁方式。我知道通常你不想测试私有方法,但我们继承了一个巨大的 Python 文件庞然大物,我们需要将其重构为更易于维护的模块。

我们不了解它的逻辑,但我们知道它有效,因此正在寻求使用TDD 来确保我们的重构不会破坏代码,目前 90% 的代码位于私有方法中,并且该模块做了太多的工作,无法完全通过黑盒测试来进行可靠的测试。

我完全希望我会编写一些测试,一旦重构完成就会被删除,但现在我希望能够插入一些私有方法来测试它们,以增加我的信心,我的重构没有当我过渡到更易于维护(和可测试)的布局时,关键逻辑被破坏了。

【问题讨论】:

  • 你可以使用pytest。因为unittest继承自Java,需要创建很多类。 Pytest为python创建,语法更简单

标签: python unit-testing


【解决方案1】:

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

假设我们有以下类:

class Foo:
 def __bar(self, arg):
     print(arg)
 def baz(self, arg):
     self.__bar(arg)

要访问“私有”__bar 方法,试试这个:

f = Foo()
f._Foo__bar('a')

有关标识符的更多信息,请参阅the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 2019-03-10
    • 2020-02-28
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多