gpt4 book ai didi

python - 在不运行 __init__ 的情况下测试实例方法的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:25 24 4
gpt4 key购买 nike

我有一个简单的类,它通过 init 获取大部分参数,它还运行各种完成大部分工作的私有(private)方法。通过访问对象变量或公共(public)方法可以获得输出。

这就是问题所在 - 我希望我的单元测试框架直接调用 init 使用不同数据调用的私有(private)方法 - 而无需通过 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)

最佳答案

对于新型类(class),请调用 object.__new__() ,将类作为参数传递。对于旧式类(class),请调用 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

关于python - 在不运行 __init__ 的情况下测试实例方法的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com