我在为我的测试打补丁时遇到问题。我正在尝试修补属于 Scrapy 的东西 - HtmlXpathSelector类。
这是一些代码:
from scrapy.selector import HtmlXPathSelector
from mock import MagicMock, patch
with patch('scrapy.selector.HtmlXPathSelector') as MockHtml:
instance = MockHtml.return_value
instance.method.return_value = 'foo'
example = HtmlXPathSelector()
print type(example)
assert example is instance
assert example.method == 'foo'
结果是:
<class 'scrapy.selector.lxmlsel.HtmlXPathSelector'>
Traceback (most recent call last):
File "<stdin>", line 6, in <module>
AssertionError
>>>
此示例与 Mock 库教程中的示例几乎相同。知道为什么它不起作用吗?
最佳答案
你不应该修补一个已经在当前测试代码中导入的类。相反,您需要修补相应模块中的类(您想要测试)。因此,如果 HtmlXPathSelector
被导入到 mymodule
中,您将修补为:
with patch('mymodule.HtmlXPathSelector') as MockClass:
...
参见 where to patch了解更多详情。
编辑如果你真的需要这个,你可以在当前模块中修补一个类:
with patch('__main__.Class') as MockClass:
关于python - 如何使用 Mock 库修补 Python 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11155210/