PyCharm 抱怨 patch.object 但为什么呢?

PyCharm complains about patch.object but why?

相当基本的设置:

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

那么如何让警告消失呢?

有 2 种方法可以消除我发现的警告。

选项 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不明白你可以在定义后向函数对象添加东西。它看到 "patch" 并查看定义,但没有找到 "object" 属性,因此出现警告。

选项 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 装饰器......我不能这样做,因为我真的喜欢让这些检查告诉我什么时候我可能会调用未解决的参考。