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

如何在python中测试模块中的私有静态方法,python,unit-testing,Python,Unit Testing,我们的python应用程序中有一个静态方法模块。这些方法使用了很多私有方法(例如:“uu do_sub_task2(**args)”),我想在这个模块中为这些私有静态方法编写单元测试,但我收到了引用错误 有办法做到这一点吗 更新:添加场景 我有一个名为“my_module.py”的模块文件 该文件内容如下: def public_method_foo(my_number): return __sub_method_bar(my_number * 10) def __sub_method_b

我们的python应用程序中有一个静态方法模块。这些方法使用了很多私有方法(例如:“uu 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
并尝试在我的测试中使用它,我在测试中得到以下异常


全局名称“\u MyTests\u sub\u method\u bar”未定义

您拥有的不是方法,不是私有的,也不是静态的;它们只是模块中普通的公共函数。所以调用它们的方式与调用其他函数的方式相同。例如:

>>> my_module.__sub_method_bar(5)
就这样,;没什么棘手的*

*嗯,有一件棘手的事情,但它可能不会影响您:如果
我的\u模块
没有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但通常情况下,您的单元测试将导入my_模块,因此这与此无关


方法是作为类成员的可调用项。方法可以是私有的(“私有”在这个意义上意味着“只对这个类可见,甚至对超类或子类都不可见”,所以除了方法之外,它没有任何意义)。关于的教程章节解释了私有方法是如何实现的,名称为mangling。方法(private或其他)也可以是静态的(“static”在本上下文中的意思是“不接受正常的
自我
”,因此,除了方法之外,它对任何东西都没有意义)。无论哪种方式,对于私有方法,您都必须手动请求名称以从外部调用它:

>>> thingy = Thingy()
>>> thingy._Thingy__private_method(5)
>>> Thingy._Thingy__private_static_method(5)

旁白-通常您不会为私有方法编写单元测试,而是为使用它们的公共方法编写单元测试。但这不是单元测试,而是两种方法的集成测试。这些真的是
@staticmethod
s吗?或者你说的“静态”是指不同的东西?(如果是,是什么?)不一定。例如@Nathanteregillus:好的,我已经更新了答案,以回答您实际想问的问题,并解释为什么它不是您实际问的问题。从我的模块导入中,我将sub_方法作为sub_方法_bar@Reishin:他问的是
\uuuMethodName
,这与
\uMethodName
(但只在方法中,而不是在模块级函数中)。@abarnert你可能是指“在类中”:)@Reishin:是的,要么是“在类中”,要么是“在方法中”,而不是“在方法中”。显然,今天在德国的许多谈话打破了我的介词