2015-04-21 17 views
14

Abbastanza setup di base:PyCharm si lamenta di patch.object ma perché?

import mock 
from mock import patch 

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

avvertimento PyCharm: Cannot find reference 'object' in 'function'.

Se a pop-up mock.py, patch.object è definito come:

patch.object = _patch_object 

Quindi, come fare l'avvertimento di andare via ?

+0

Potrebbe essere che PyCharm non capisca che è possibile aggiungere cose agli oggetti funzione poiché questo è un modo molto insolito di fare le cose? –

risposta

9

Ci sono 2 modi per eliminare l'avviso che ho trovato.

Opzione 1. È possibile effettuare l'avvertimento andare via, mettendo "# noinspection PyUnresolvedReferences" sopra la chiamata patch:

import mock 
from mock import patch 

def test_foo(): 

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

Questa quiets l'ispettore per la chiamata e fa l'avvertimento andare via. PyCharm ancora non ne sa nulla, ma l'avviso è andato via.

Credo che Mikko Ohtamaa sia corretto. PyCharm non capisce che è possibile aggiungere cose agli oggetti funzione dopo la definizione. Vede "patch" e guarda la definizione e non trova una proprietà "oggetto", quindi l'avviso.

Opzione 2. L'altro modo in cui ho trovato di eliminare l'avviso è definirlo nel file. Assegnalo a se stesso. Stranamente, questo funziona per me e tutti gli avvisi di patch vanno via. Il tuo chilometraggio può variare a seconda di quali altre ispezioni hai attivato.

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

def test_foo(): 

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

Per me questo è ciò che funziona perché io di solito Patch mie classi un modo diverso, utilizzando decoratori in questo modo:

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

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

Se ho usato le PyUnresolvedReferences # noinspection trucco, semplicemente disabilitato questa ispezione per l'intera funzione, non solo per il decoratore @ patch.object ... e non posso averlo perché mi piacerebbe davvero che quelle ispezioni mi dicessero quando potrei chiamare un riferimento non risolto.

+1

Mi piace la tua opzione 2! :-D – physicalattraction

Problemi correlati