如何使用 'with' 语句对 Python 锁进行单元测试?
How to unittest Python Lock is acquired with 'with' statement?
使用 Python 2.6.6
所以我刚刚了解到以下内容:
myLock.acquire()
doStuff()
myLock.release()
可以替换为:
with myLock:
doStuff()
我的疑惑是,使用以前的代码,我可以通过模拟锁来单元测试锁被用来保护正在做的事情。但是对于后者,我的单元测试现在(预期)失败了,因为没有调用 acquire() 和 release() 。那么对于后一种情况,我如何验证锁是否用于保护操作?
我更喜欢第二种方法,因为它不仅更简洁,而且我不会编写忘记解锁资源的代码。 (并不是说我以前做过...)
with
语句在开始和结束(分别)内部调用了 __enter__
和 __exit__
魔法方法。您可以通过使用 MagicMock
或显式设置 mock.__enter__ = Mock();mock.__exit__ = Mock()
.
来模拟这些方法
以这种方式设置魔术方法仅适用于模拟;要覆盖非模拟对象上的魔术方法,您必须在类型上设置它。
使用 Python 2.6.6
所以我刚刚了解到以下内容:
myLock.acquire()
doStuff()
myLock.release()
可以替换为:
with myLock:
doStuff()
我的疑惑是,使用以前的代码,我可以通过模拟锁来单元测试锁被用来保护正在做的事情。但是对于后者,我的单元测试现在(预期)失败了,因为没有调用 acquire() 和 release() 。那么对于后一种情况,我如何验证锁是否用于保护操作?
我更喜欢第二种方法,因为它不仅更简洁,而且我不会编写忘记解锁资源的代码。 (并不是说我以前做过...)
with
语句在开始和结束(分别)内部调用了 __enter__
和 __exit__
魔法方法。您可以通过使用 MagicMock
或显式设置 mock.__enter__ = Mock();mock.__exit__ = Mock()
.
以这种方式设置魔术方法仅适用于模拟;要覆盖非模拟对象上的魔术方法,您必须在类型上设置它。