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

Как исправить константу в python

В моем проекте есть два разных модуля. Один из них - это файл конфигурации, содержащий

LOGGING_ACTIVATED = False

Эта константа используется во втором модуле (называет его основным) следующим образом:

if LOGGING_ACTIVATED:
    amqp_connector = Connector()

В моем тестовом классе для основного модуля я хотел бы исправить эту константу со значением

True

К сожалению, следующее не работает

@patch("config.LOGGING_ACTIVATED", True)

и не работает:

@patch.object("config.LOGGING_ACTIVATED", True)

Кто-нибудь знает, как исправлять константу из разных модулей?

4b9b3361

Ответ 1

Если тест if LOGGING_ACTIVATED: происходит на уровне модуля, вам необходимо убедиться, что этот модуль еще не импортирован. Код уровня модуля запускается только один раз (первый раз, когда модуль импортируется в любом месте), вы не можете проверить код, который не будет работать снова.

Если тест находится в функции, обратите внимание, что используемое глобальное имя LOGGING_ACTIVATED, а не config.LOGGING_ACTIVATED. Как таковой вам нужно исправить main.LOGGING_ACTIVATED здесь:

@patch("main.LOGGING_ACTIVATED", True)

как фактическую ссылку, которую вы хотели заменить.

Также см. где исправлять раздел документации mock.

Вы должны подумать о том, что рефакторинг кода на уровне модуля является чем-то более проверяемым. Хотя вы можете принудительно перезагрузить код модуля, удалив объект модуля из сопоставления sys.modules, просто очистить, чтобы переместить код, который вы хотите проверить, в функцию.

Итак, если ваш код теперь выглядит примерно так:

if LOGGING_ACTIVATED:
    amqp_connector = Connector()

рассмотрите возможность использования функции:

def main():
    global amqp_connector
    if LOGGING_ACTIVATED:
        amqp_connector = Connector()

main()

или создать объект с атрибутами даже.