导入后所有测试用例的Python补丁模块

时间:2018-01-16 02:51:34

标签: python unit-testing mocking patch

我仍然在与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_pikaNone。 当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()包装我的所有测试用例。

0 个答案:

没有答案