我仍然在与mock and patch挣扎。
我有几个测试用例,其中一些有导入(在顶部)然后导入pika。
在不必更改代码的情况下模拟pika
会很不错。
到目前为止我一直在做的事情:
def setUp(self):
self.patch_pika = patch('<package>.rabbitmq.pika')
self.mock_pika = self.patch_pika.start()
如果另一个软件包在 setUp 运行之前导入 .rabbitmq ,则会失败(显然,当测试运行器导入测试用例时)。我找到this,建议使用patch.dict()。以与上面相同的方式使用它:
def setUp(self):
self.patch_pika = patch.dict('sys.modules', pika=Mock())
self.mock_pika = self.patch_pika.start()
结果self.mock_pika
为None
。
当Mock()
被调用并作为参数传递时,我认为这可能是正确的方法:
def setUp(self):
self.mock_pika = Mock()
self.patch_pika = patch.dict('sys.modules', pika=self.mock_pika)
不幸的是, AttributeError失败了:模块'sys'没有属性'modules'
我对如何实现这一目标毫无头绪。任何帮助表示赞赏。我想避免用with patch.dict()
包装我的所有测试用例。