Подтвердить что ты не робот

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

Итак, как заставить предупреждение уйти?

4b9b3361

Ответ 1

Есть два способа избавиться от предупреждения, которое я нашел.

Вариант 1. Вы можете отключить предупреждение, поместив "noinspection PyUnresolvedReferences" над вызовом патча:

import mock
from mock import patch

def test_foo():

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

Это завершает инспектор для вызова и предупреждает об этом. PyCharm до сих пор ничего не знает об этом, но предупреждение ушло.

Я считаю, что Микко Ортамаа прав. 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... и я не могу этого сделать, потому что мне действительно нравятся эти проверки скажите мне, когда я могу вызвать неразрешенную ссылку.