我有一个函数装饰器,用于跟踪一个函数运行需要多长时间,然后发出该度量。
def measure_and_emit_runtime(metric_name):
def timer(func):
@functools.wraps(func)
def timer_wrapper(*args, **kwargs):
start_time = time.clock()
output = func(*args, **kwargs)
end_time = time.clock()
run_time = end_time - start_time
with StatsClient() as client:
client.gauge(metric_name, run_time)
return output
return timer_wrapper
return timer
我试图编写一个单元测试,看看在修饰和调用给定的函数之后是否使用预期的参数调用client.gauge,但对如何调用感到困惑。
@measure_and_emit_runtime('some_metric_name')
def some_function():
return None
some_function()
# Expect client.gauge to be called with 'some_metric_name' as one argument
任何提示都会有帮助的!不幸的是,我一直在玩模拟模块没有成功。