如何判断Python中的函数是否被调用?

0 投票
3 回答
4431 浏览
提问于 2025-04-18 02:25

我第一次写单元测试,感觉有点难以理解。我有一个叫 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

撰写回答