Python函数装饰器
首先,您所说的概念是函数装饰器的概念。函数装饰器通过将函数定义放在函数定义开始之前的行(符号@
)来应用于函数定义。它是一种修改函数行为或操作函数组合的工具。这是一个例子
class entryExit(object):
def __init__(self, f):
self.f = f
def __call__(self):
print "Entering", self.f.__name__
self.f()
print "Exited", self.f.__name__
@entryExit # decorator
def func1(): # decorated function
print "inside func1()"
@entryExit
def func2():
print "inside func2()"
我跑
func1()
func2()
我明白了
Entering func1
inside func1()
Exited func1
Entering func2
inside func2()
Exited func2
Python unittest.mock.patch()
patch 充当函数装饰器、类装饰器或上下文管理器。在函数体或 with 语句内部,目标被一个新对象修补。当 function/with 语句退出时,补丁被撤消。
Patch 允许您修改with
语句中的函数行为。
这是一个示例,其中 patch() 用作带有with
语句的上下文管理器。
>>> with patch.object(ProductionClass, 'method', return_value=None)
as mock_method:
... thing = ProductionClass()
... thing.method(1, 2, 3)
...
>>> mock_method.assert_called_once_with(1, 2, 3)