如何判断Python中的函数是否被调用?
我第一次写单元测试,感觉有点难以理解。我有一个叫 IsInitialized() 的方法,如果另一个方法 LoadTable() 从来没有被调用过,这个方法应该返回 false。那我该怎么写一个测试方法来验证这一点呢?
3 个回答
0
你需要检查对象是否相等,并使用一个标志来表示结果。
比如:
class Detector(object):
__init__(self):
self.loadTableIsCalledForObjA = False
detector = Detector()
def isInitialized():
if detector.loadTableIsCalledForObjA:
return False
def loadTable(someObj):
if type(someObj) is ObjA:
detector.loadTableIsCalledForObjA = True
1
你可以使用一个叫做 global
的变量,并在你想要检查的函数里面把它设置为 True
:
global hasRun
hasRun = False
def foo():
global hasRun
hasRun = True
def goop():
global hasRun
if hasRun == False:
#Do something if it hasn't run
在你的代码中:
global hasRun
hasRun = False
def LoadTable():
global hasRun
doStuff()
hasRun = True
def IsInitialized():
global hasRun
return hasRun #Returns False if hasRun = False, and vice-versa
3
为了简单起见,我会把它做成一个属性:
class with_called_attribute:
def __init__(self, func):
self.func = func
self.called = False
def __call__(self, *args, **kwargs):
self.called = True
self.func(*args, **kwargs)
@with_called_attribute
def run_some_thing(*args, **kwargs):
print("You called with:", *args, **kwargs)
run_some_thing.called
#>>> False
run_some_thing(10)
#>>> You called with: 10
run_some_thing.called
#>>> True