如何使用'with'语句获取单元测试Python Lock?

Pfu*_*Guy 7 python multithreading python-unittest

使用Python 2.6.6

所以我刚刚了解到以下内容:

myLock.acquire()
doStuff()
myLock.release()
Run Code Online (Sandbox Code Playgroud)

可以替换为:

with myLock:
  doStuff()
Run Code Online (Sandbox Code Playgroud)

我的问题是,使用前面的代码,我可以通过模拟Lock来单元测试锁被用来保护做事.但是对于后者,我的单元测试现在(预期)失败,因为没有调用acquire()和release().因此,对于后一种情况,我如何验证锁是否用于保护做事?

我更喜欢第二种方法,因为它不仅更简洁,而且我不可能编写忘记解锁资源的代码.(不是说我以前做过那个......)

ppp*_*ery 7

with语句在内部(分别)开始和结束时调用__enter____exit__魔术方法.您可以通过使用MagicMock或通过显式设置来模拟这些方法mock.__enter__ = Mock();mock.__exit__ = Mock().

以这种方式设置魔法只适用于模拟; 要覆盖非模拟对象上的魔术方法,您必须在类型上设置它.