我们的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
更新#2 我问这个问题的原因是因为我有类似的情况,但是当我将以下引用添加到我的test.py模块文件时:
from my_module import __sub_method_bar
并尝试在我的测试中使用它,我在测试中得到以下异常
全局名称'_MyTests__sub_method_bar'未定义
答案 0 :(得分:4)
你拥有的不是方法,不是私人的,不是静态的;它们只是模块中的普通旧公共功能。因此,您可以像调用任何其他函数一样调用它们。以你的例子:
>>> my_module.__sub_method_bar(5)
那是它;没有什么棘手的。 *
*嗯,有一个一个棘手的事情,但它可能不会影响到你:如果my_module
没有{ {1}},而你__all__
,你将不会获得名称以from my_module import *
开头的任何全局变量(包括函数)。但通常你的单元测试会转到_
,所以这不相关。
方法是属于类成员的可调用对象。方法可以是私有的("私有"在这个意义上意味着"只有这个类可见,甚至不是超级或子类",所以它对于除方法之外的任何事情都没有意义)。关于Classes的教程章节解释了如何使用名称修改实现私有方法。方法(私人或其他方式)也可以是静态的("静态"在此上下文中意味着"不采用正常的import my_module
",所以再一次,它没有'除了方法之外的任何事情都有意义)。无论哪种方式,对于私有方法,您必须手动取消名称以从外部调用它:
self