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

时间:2015-04-30 00:35:01

标签: 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

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

from my_module import __sub_method_bar

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

全局名称'_MyTests__sub_method_bar'未定义

1 个答案:

答案 0 :(得分:4)

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

>>> my_module.__sub_method_bar(5)

那是它;没有什么棘手的。 *

*嗯,有一个一个棘手的事情,但它可能不会影响到你:如果my_module没有{ {1}},而你__all__,你将不会获得名称以from my_module import *开头的任何全局变量(包括函数)。但通常你的单元测试会转到_,所以这不相关。

方法是属于成员的可调用对象。方法可以是私有的("私有"在这个意义上意味着"只有这个类可见,甚至不是超级或子类",所以它对于除方法之外的任何事情都没有意义)。关于Classes的教程章节解释了如何使用名称修改实现私有方法。方法(私人或其他方式)也可以是静态的("静态"在此上下文中意味着"不采用正常的import my_module",所以再一次,它没有'除了方法之外的任何事情都有意义)。无论哪种方式,对于私有方法,您必须手动取消名称以从外部调用它:

self