PyCharm抱怨patch.object但为什么?

Sch*_*999 16 python pycharm python-mock

非常基本的设置:

import mock
from mock import patch

def test_foo():
  with patch.object(MyObject...):
    # do some stuff here...
Run Code Online (Sandbox Code Playgroud)

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

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

patch.object = _patch_object
Run Code Online (Sandbox Code Playgroud)

那么如何让警告消失呢?

Ray*_*rea 11

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

选项1. 您可以通过在补丁调用上方添加"#noinspection PyUnresolvedReferences"来消除警告:

import mock
from mock import patch

def test_foo():

    # noinspection PyUnresolvedReferences
    with patch.object(MyObject...):
        # do some stuff here...
Run Code Online (Sandbox Code Playgroud)

这使检查员平静了呼叫并使警告消失.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
Run Code Online (Sandbox Code Playgroud)

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

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

@patch.object(MyObject, 'methodName')
def test_foo(mockMethod):
    # do stuff here
Run Code Online (Sandbox Code Playgroud)

如果我在这里使用了#noinspection PyUnresolvedReferences技巧,它只是为整个函数禁用了这个检查,而不仅仅是@ patch.object装饰器...我不能拥有它,因为我真的希望这些检查告诉我什么时候我可能会称之为未解决的参考.

  • 我喜欢你的选择2!:-D (2认同)