Python模拟缓存方法

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (102)

我有一个缓存方法的类:

class Foo:

   def __init__(self, package: str):
      self.is_installed = functools.lru_cache()(
        self.is_installed)

   def is_installed():
       #implementation here

以及通过循环类的实例来调用方法的代码

try:
  if Foo('package').is_installed():
except Exception as e:
  print('Could not install')
else:
  print('Installed properly')

我试图通过模拟is_installed抛出异常的方法来测试此代码。

@patch.object(Foo, 'is_installed')
def test_exception_installing_bear(self, mock_method):
    mock_method.side_effect = Exception('Something bad')
    # code to assert 'could not install' in stdout

但它不起作用。不抛出异常并且断言失败。另一方面,输出显示它installed properly。我认为有一些东西需要缓存。我究竟做错了什么?

提问于
用户回答回答于

见文件

unittest.TestCase.assertRaises

替代

with self.assertRaises(Exception):
    mock_args = {'side_effect': Exception}
    with mock.patch('foo.Foo.is_installed', **mock_args):
         Foo.is_installed

扫码关注云+社区

领取腾讯云代金券