Я тестирую приложение, которое имеет несколько внешних зависимостей, и я использовал методы обезьяньего исправления, чтобы исправить функции внешних библиотек с помощью пользовательской реализации, чтобы помочь моим тестам. Он работает так, как ожидалось.
Но проблема, с которой я сейчас сталкиваюсь, заключается в том, что это делает мой тестовый файл очень грязным. У меня есть несколько тестов, и каждый тест требует собственной реализации исправленной функции.
Например, предположим, что у меня есть функция GET из внешней библиотеки, моя test_a()
нуждается в исправлении GET()
, чтобы она возвращала False, а test_b()
нуждается в исправлении GET()
, чтобы она возвращала True.
Каков предпочтительный способ обработки такого сценария. В настоящее время я делаю следующее:
def test_a(monkeypatch):
my_patcher(monkeypatch, patch_get_to_return_true = True, patch_get_to_return_false = False, patch_get_to_raise_exception = False)
def test_b(monkeypatch)
my_patcher(monkeypatch, patch_get_to_return_true = True, patch_get_to_return_false = False, patch_get_to_raise_exception = False)
def test_c(monkeypatch)
my_patcher(monkeypatch, patch_get_to_return_true = False, patch_get_to_return_false = False, patch_get_to_raise_exception = True)
def my_patcher(monkeypatch, patch_get_to_return_true = False, patch_get_to_return_false = False, patch_get_to_raise_exception = False):
def patch_func_pos():
return True
patch_func_neg():
return False
patch_func_exception():
raise my_exception
if patch_get_to_return_true:
monkeypatch.setattr(ExternalLib, 'GET', patch_func_pos)
if patch_get_to_return_false:
monkeypatch.setattr(ExternalLib, 'GET', patch_func_neg)
if patch_get_to_raise_exception:
monkeypatch.setattr(ExternalLib, 'GET', patch_func_exception)
В приведенном выше примере всего три теста, которые исправляют одну функцию. Мой фактический тестовый файл содержит около 20 тестов, и каждый тест будет дополнительно исправлять несколько функций.
Может ли кто-нибудь предложить мне лучший способ справиться с этим? Рекомендуется ли вынести часть monkeypatching в отдельный файл?