PyCharm抱怨patch.object但为什么?

时间:2015-04-21 20:05:47

标签: python pycharm python-mock

非常基本的设置:

import mock
from mock import patch

def test_foo():
  with patch.object(MyObject...):
    # do some stuff here...

PyCharm警告:Cannot find reference 'object' in 'function'.

如果要弹出mock.py,patch.object定义为:

patch.object = _patch_object

那么如何让警告消失呢?

1 个答案:

答案 0 :(得分:11)

有两种方法可以摆脱我发现的警告。

选项1。 您可以通过放置" #noinspection PyUnresolvedReferences"来消除警告。在补丁电话上方:

import mock
from mock import patch

def test_foo():

    # noinspection PyUnresolvedReferences
    with patch.object(MyObject...):
        # do some stuff here...

这使检查员安静地接听电话并使警告消失。 PyCharm仍然对此一无所知,但警告已经消失。

我相信Mikko Ohtamaa是正确的。 PyCharm并不了解您可以在定义后向函数对象添加内容。它看到"补丁"并查看定义,并没有找到"对象"财产,因此警告。

选项2。 我发现摆脱警告的另一种方法是在文件中定义它。将其分配给自己。奇怪的是,这适用于我,所有补丁警告都消失了。您的里程可能会有所不同,具体取决于您启用的其他检查。

import mock
from mock import patch
patch.object = patch.object

def test_foo():

    with patch.object(MyObject...):
        # do some stuff here

对我来说这是有效的,因为我通常以不同的方式修补我的类,使用像这样的装饰器:

import mock
from mock import patch
patch.object = patch.object

@patch.object(MyObject, 'methodName')
def test_foo(mockMethod):
    # do stuff here

如果我在这里使用了#noinspection PyUnresolvedReferences技巧,它只是为整个函数禁用了这个检查,而不仅仅是@ patch.object装饰器...而且我不能这样做因为我实际上喜欢那些检查告诉我何时可能会称之为未解决的参考。