python pycharm python-mock

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.