#python #unit-testing #mocking #python-unittest
Вопрос:
У меня есть приведенная ниже структура файлов в моем проекте. Магия в основном содержит оболочки вокруг сторонних библиотек.
.
├── magic
│ └── __init__.py
│ └── mock.py
│ └── real.py
Поэтому, основываясь на переменных среды, мы импортируем методы либо mock.py
полностью, либо real.py
. Теперь я хочу написать модульные тесты для некоторых методов, которые используют эти волшебные методы magic
. Содержание __init__.py
приведено ниже.
if SOME_ENV:
from .mock import (
magic_method
)
else:
from .real import (
magic_method
)
__all__ = [
"magic_method"
]
В модульных тестах, когда я хочу исправить их и посмотреть, был ли magic_method
вызван, я всегда получаю его так, как будто magic_method
он никогда не вызывался, но он вызывается каждый раз, когда я запускаю сценарий. Ниже приведен пример test_case()
def test_magic(db):
with patch("magic.mock.magic_method") as magic_method:
# something
assert magic_method.called
Вышеуказанный тест каждый раз терпит неудачу. Есть какие-нибудь предложения?
Комментарии:
1. Вы импортируете
magic_method
вmagic
(from xxx import magic_method
), поэтому вам нужно исправить этот метод:patch("magic.magic_method")
.2. Да, я тоже пробовал @MrBeanBremen, но это не сработало
3. Ну, это зависит от того, что вы делаете в «чем-то» и как
magic_method
туда импортируется.