我有一个简单的类,通过init获取大部分参数,它还运行各种私有方法来完成大部分工作.输出可通过访问对象变量或公共方法获得.
这就是问题 – 我希望我的unittest框架能够直接调用init调用的私有方法,而不需要通过init.
最好的方法是什么?
到目前为止,我一直在重构这些类,以便init执行更少的操作并且数据单独传递.这使得测试变得简单,但我认为该类的可用性受到了一些影响.
编辑:基于Ignacio答案的示例解决方案:
import types
class C(object):
def __init__(self, number):
new_number = self._foo(number)
self._bar(new_number)
def _foo(self, number):
return number * 2
def _bar(self, number):
print number * 10
#--- normal execution - should print 160: -------
MyC = C(8)
#--- testing execution - should print 80 --------
MyC = object.__new__(C)
MyC._bar(8)
最佳答案 对于新式类,请调用
object.__new__()
,将该类作为参数传递.对于旧式类,调用
types.InstanceType()
将类作为参数传递.
import types
class C(object):
def __init__(self):
print 'init'
class OldC:
def __init__(self):
print 'initOld'
c = object.__new__(C)
print c
oc = types.InstanceType(OldC)
print oc