2015-04-21 112 views
14

漂亮的基本设置:PyCharm抱怨patch.object,但为什么?

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 

那么如何使报警消失?

+0

可能是PyCharm不明白,你可以添加东西的功能对象,因为这是非常不寻常的做事方式? –

回答

9

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

选项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装饰器......我不能这样做,因为我实际上喜欢让这些检查告诉我什么时候可能会调用一个未解析的引用。

+1

我喜欢你的选择2! :-D – physicalattraction

相关问题