Когда речь идет о тестировании на Python, обеспечение надежных и изолированных тестов является критическим. Одной из общих проблем является то, как издеваться или изменить поведение объектов и функций во время тестов. Вот где сияет матч -манечник Pytest Monkeypatch. Он обеспечивает гибкий способ динамически заменить части вашего кода во время тестирования.
]В этом блоге мы рассмотрим силу обезьяны, почему это полезно, и как вы можете использовать его для написания чистых, эффективных тестов.
]приспособление для обезьяны в Pytest позволяет изменить или заменить:
Эта динамическая модификация является временной и применима только к объему теста, обеспечивая восстановление исходного поведения после окончания теста. Это делает MonkeyPatch особенно полезным для насмешки, переоценки зависимостей или кода тестирования в определенных условиях без постоянных изменений.
]Вот несколько ключевых сценариев, в которых обезьян может упростить ваши тесты:
]
# my_app.py
def fetch_data ():
# Смоделируйте звонок API
вернуть "настоящий ответ API"
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"]
]
# test_my_app.py
от my_app import fetch_data
def test_fetch_data (monkeypatch):
def mock_fetch_data ():
вернуть "высмеянный ответ"
monkeypatch.setattr ("my_app.fetch_data", mock_fetch_data)
Assert fetch_data () == "Мик -ответ"
# test_my_app.py from my_app import fetch_data def test_fetch_data(monkeypatch): def mock_fetch_data(): return "Mocked Response" monkeypatch.setattr("my_app.fetch_data", mock_fetch_data) assert fetch_data() == "Mocked Response"]
]
# config.py
Импорт ОС
def get_database_url ():
return os.getenv ("database_url", "default_url")
# config.py import os def get_database_url(): return os.getenv("DATABASE_URL", "default_url")]
]
# test_config.py
из конфигурации импорта get_database_url
def test_get_database_url (monkeypatch):
monkeypatch.setenv ("database_url", "Mocked_url")
assert get_database_url () == "Mocked_url"
# test_config.py from config import get_database_url def test_get_database_url(monkeypatch): monkeypatch.setenv("DATABASE_URL", "mocked_url") assert get_database_url() == "mocked_url"]
]
# my_class.py
Калькулятор класса:
def Add (self, a, b):
вернуть а б
# my_class.py class Calculator: def add(self, a, b): return a b]
]
# test_my_class.py
Из калькулятора импорта MY_CLASS
def test_calculator_add (monkeypatch):
def mock_add (self, a, b):
возврат 42
monkeypatch.setattr (калькулятор, "добавить", mock_add)
calc = calculator ()
Assert Calc.Add (1, 2) == 42
# test_my_class.py from my_class import Calculator def test_calculator_add(monkeypatch): def mock_add(self, a, b): return 42 monkeypatch.setattr(Calculator, "add", mock_add) calc = Calculator() assert calc.add(1, 2) == 42]
]
# my_module.py
def is_file_openable (имя файла):
пытаться:
с Open (имя файла, "r"):
вернуть правду
кроме Ioerror:
вернуть ложь
# my_module.py def is_file_openable(filename): try: with open(filename, "r"): return True except IOError: return False]
]
# test_my_module.py
от my_module import is_file_openable
def test_is_file_openable (monkeypatch):
def mock_open (имя файла, режим):
Поднимите ioerror ("издевался на ioerror")
monkeypatch.setattr ("buldins.open", mock_open)
не утверждайте is_file_openable ("test.txt")
# test_my_module.py from my_module import is_file_openable def test_is_file_openable(monkeypatch): def mock_open(filename, mode): raise IOError("Mocked IOError") monkeypatch.setattr("builtins.open", mock_open) assert not is_file_openable("test.txt")] Лучшие практики с обезьяной
, включив примеры и передовые практики, изложенные здесь, вы можете сделать свой тестовый набор надежным и поддерживаемым. Изучите официальную документацию Pytest, чтобы узнать больше и разблокировать весь потенциал Pytest!
счастливое тестирование!
]
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3