python - PyCharm se queja de patch.object pero ¿por qué?
python-mock (1)
Configuración bastante básica:
import mock
from mock import patch
def test_foo():
with patch.object(MyObject...):
# do some stuff here...
Advertencia de PyCharm: Cannot find reference ''object'' in ''function''.
Si se abre mock.py, patch.object
se define como:
patch.object = _patch_object
Entonces, ¿cómo hacer la advertencia para irse?
Hay 2 formas de deshacerse de la advertencia que he encontrado.
Opción 1. Puede hacer que la advertencia desaparezca poniendo "# noinspection PyUnresolvedReferences" sobre la llamada al parche:
import mock
from mock import patch
def test_foo():
# noinspection PyUnresolvedReferences
with patch.object(MyObject...):
# do some stuff here...
Esto tranquiliza al inspector de la llamada y hace que desaparezca la advertencia. PyCharm aún no sabe nada al respecto, pero la advertencia ha desaparecido.
Creo que Mikko Ohtamaa tiene razón. PyCharm no entiende que puede agregar elementos a los objetos de función después de la definición. Ve "parche" y mira la definición y no encuentra una propiedad de "objeto", de ahí la advertencia.
Opción 2. La otra forma que he encontrado para deshacerme de la advertencia es simplemente definirla en su archivo. Asignalo a si mismo. Curiosamente, esto funciona para mí y todas las advertencias de parches desaparecen. Su millaje puede variar según las otras inspecciones que haya habilitado.
import mock
from mock import patch
patch.object = patch.object
def test_foo():
with patch.object(MyObject...):
# do some stuff here
Para mí, esto es lo que funciona porque, por lo general, parcheo mis clases de una manera diferente, usando decoradores así:
import mock
from mock import patch
patch.object = patch.object
@patch.object(MyObject, ''methodName'')
def test_foo(mockMethod):
# do stuff here
Si usé el truco # noinspection PyUnresolvedReferences aquí, simplemente deshabilitó esta inspección para toda la función, no solo para el decorador @ patch.object ... y no puedo tener eso porque realmente me gusta que esas inspecciones me digan cuándo Podría estar llamando una referencia no resuelta.