Отказывание перед импортом модуля

Как я могу исправить и издеваться над getLogger в этом тестируемом модуле (MUT):

 # Start of the module under test import logging log = logging.getLogger('some_logger') # ... 

Я бы хотел:

 mock_logging.getLogger.return_value = Mock() 

Однако я не могу создать mock_logging перед импортом MUT, но импорт MUT уже вызывает getLogger

Для этого потребуется импортировать модуль, не выполняя его в первую очередь, что, к сожалению, для вас не будет работать, если вы не делаете какие-то причудливые хаки, такие как изменение дерева синтаксиса для модуля, но вы, вероятно, тоже этого не хотите.

Что вы можете сделать, так это изменить эту ссылку импорта-времени после импорта и заменить их вручную макетными объектами или повторно выполнить инструкции после того, как ваш макет-объект будет установлен, хотя я знаю, что это ограниченное использование.

Это можно сделать, сначала импортируя и исправляя logging.getLogger и только затем импортируйте свой mut

 import unittest from unittest import mock import logging with mock.patch('logging.getLogger') as mock_method: import mut mock_method.assert_called_once_with('some_logger')