你如何在python的模块中测试私有静态方法

Nat*_*lus 3 python unit-testing

我们的python应用程序中有一个静态方法模块。这些方法使用了很多私有(例如:“__do_sub_task2(**args)”)我想在这个模块中为这些私有静态方法编写单元测试,但我收到了引用错误。

有没有办法做到这一点?

更新:添加场景

我有一个名为“my_module.py”的模块文件,该文件的内容如下:

def public_method_foo(my_number):
  return __sub_method_bar(my_number * 10)

def __sub_method_bar(other_number)
  return other_number + 11
Run Code Online (Sandbox Code Playgroud)

更新 #2 我问这个问题的原因是因为我有一个与上面类似的场景,但是当我将以下引用添加到我的 test.py 模块文件时:

from my_module import __sub_method_bar
Run Code Online (Sandbox Code Playgroud)

并尝试在我的测试中使用它,我的测试中出现以下异常

全局名称 '_MyTests__sub_method_bar' 未定义

aba*_*ert 5

你拥有的不是方法,不是私有的,也不是静态的;它们只是模块中普通的旧公共函数。因此,您可以像调用任何其他函数一样调用它们。对于您的示例:

>>> my_module.__sub_method_bar(5)
Run Code Online (Sandbox Code Playgroud)

就是这样; 没什么难的。*

* 好吧,有一件棘手的事情,但它可能不会在这里影响您:如果my_module没有__all__,而您有from my_module import *,您将不会获得任何名称以_. 但通常您的单元测试将要进行import my_module,因此这无关紧要。


方法是作为成员的可调用对象。并且方法可以是私有的(“私有”在这个意义上意味着“只对这个类可见,甚至对超类或子类不可见”,所以除了方法之外没有任何意义)。关于的教程章节解释了私有方法是如何通过名称修改实现的。方法(私有的或其他的)也可以是静态的(在这种情况下,“静态”意味着“不采用正常的self”,所以再说一次,除了方法之外,它对任何东西都没有意义)。无论哪种方式,对于私有方法,您都必须手动取消名称以从外部调用它:

>>> thingy = Thingy()
>>> thingy._Thingy__private_method(5)
>>> Thingy._Thingy__private_static_method(5)
Run Code Online (Sandbox Code Playgroud)