«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Освоение обезьяны Pytest: упростите тестирование

Освоение обезьяны Pytest: упростите тестирование

Опубликовано в 2025-02-09
Просматривать:190

Mastering Pytest Monkeypatch: Simplify Your Testing

Когда речь идет о тестировании на Python, обеспечение надежных и изолированных тестов является критическим. Одной из общих проблем является то, как издеваться или изменить поведение объектов и функций во время тестов. Вот где сияет матч -манечник Pytest Monkeypatch. Он обеспечивает гибкий способ динамически заменить части вашего кода во время тестирования.

]

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

]
]

] Что такое обезьяна?

]

приспособление для обезьяны в Pytest позволяет изменить или заменить:

    ]
  • функции или методы
  • атрибуты объектов
  • переменные среды
]

Эта динамическая модификация является временной и применима только к объему теста, обеспечивая восстановление исходного поведения после окончания теста. Это делает MonkeyPatch особенно полезным для насмешки, переоценки зависимостей или кода тестирования в определенных условиях без постоянных изменений.

]
]

] Зачем использовать обезьян?

]

Вот несколько ключевых сценариев, в которых обезьян может упростить ваши тесты:

    ]
  1. ] издевательные зависимости : заменить внешние зависимости на макетные объекты или функции для проверки изолированных единиц.
  2. ]
  3. ] случаи тестирования краев ]
  4. временные изменения среды
  5. : изменить переменные среды для тестирования логики, специфичной для конфигурации. ] ]
  6. заменить методы
  7. : временно переопределить методы классов или модулей. ]
  8. ]
] Примеры использования обезьяны
]

] 1. Измешивание функции

]

предположим, что у вас есть функция, которая опирается на внешний API:

]

]
# 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")
] Лучшие практики с обезьяной
]

]

]
    Scope
  1. : Используйте обезьян только в рамках теста, чтобы избежать побочных эффектов. ] ]
  2. избегайте чрезмерного использования
  3. : резервировать обезьян для сценариев, где впрыск зависимости или другие шаблоны проектирования невозможны. ] ]
  4. Используйте явные пути
  5. : при настройке атрибутов, предоставьте явный модуль и пути объекта, чтобы предотвратить случайные модификации. ] ]
  6. восстановить дефолты
  7. : monkeypatch автоматически восстанавливает исходное состояние, но избегайте цепочки или гнездования, чтобы сохранить тесты простыми. ] ]
  8. ]
] Заключение
]

Monkeypatch Pytest является мощным инструментом для написания изолированных, надежных и чистых тестов. Независимо от того, наденьте ли вы функцию, переоценивая переменные среды или случаи тестирования, обезьяны могут значительно упростить ваш рабочий процесс тестирования.

]

, включив примеры и передовые практики, изложенные здесь, вы можете сделать свой тестовый набор надежным и поддерживаемым. Изучите официальную документацию Pytest, чтобы узнать больше и разблокировать весь потенциал Pytest!

счастливое тестирование!

]

]
Заявление о выпуске Эта статья воспроизводится по адресу: https://dev.to/mohamedabdelwahab/mastering-pytest-monkeypatch-simplify-your-testing-jj8?1 Если есть какие-либо нарушения, обратитесь к исследованию[email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3