我的代码中有一个方法,如下所示:
def save(items):
try:
for item in items():
do_something(item)
except Exception:
my_logging.warning("error happened")
def do_something(item):
pass
我想从代码中的其他位置调用此方法,但是,我想调用另一种方法而不是do_something(item)
:
@transaction.atomic
def do_with_transaction(item)
delete(item)
do_something(item)
对生产代码使用带副作用的mock是否可以?这样我就可以模仿do_something()
来使用do_with_transaction(item)
。
它看起来像一个干净的解决方案。
答案 0 :(得分:2)
如果你想要的是重用save(items)
但是在do_something()
循环中调用另一个函数(而不是for
),只需将所需的函数作为参数传递:
def save(items, callback=do_something):
for item in items():
try:
callback(item)
except Exception as e:
my_logging.exception("error %s happened on item %s", e, item)
然后:
save(items, do_something_with_transaction)