Edw*_*rdr 3 python unit-testing mocking scrapy python-mock
我在修补课程时遇到了麻烦.我正在尝试修补属于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'
Run Code Online (Sandbox Code Playgroud)
结果是:
<class 'scrapy.selector.lxmlsel.HtmlXPathSelector'>
Traceback (most recent call last):
File "<stdin>", line 6, in <module>
AssertionError
>>>
Run Code Online (Sandbox Code Playgroud)
这个例子和Mock库教程中的例子差不多.知道为什么它不起作用吗?
您不应修补已在当前测试代码中导入的类.相反,您需要在相应的模块中修补该类(您想要测试).因此,如果HtmlXPathSelector导入mymodule,您将修补为:
with patch('mymodule.HtmlXPathSelector') as MockClass:
...
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅补丁的位置.
编辑如果您确实需要这个,可以使用以下方法修补当前模块中的类:
with patch('__main__.Class') as MockClass:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4570 次 |
| 最近记录: |