Вы можете либо:
1 - использовать внедрение зависимостей (изменить способ определения функции, чтобы ее было проще тестировать)
def foo(par1, fetch_function):
db_value = fetch_function(par1)
if db_value > 10:
return db_value * 5
else:
return 1
В обычном коде назовите это так:
foo(my_par_1, db_fetch)
вместо:
foo(my_par1)
А в модульных тестах назовите это так:
foo(my_par_1, lambda par: 42)
Итак, во время модульных тестов значение всегда будет 42, а не реальным значением базы данных.
2 - макетировать вызов функции fetch_file
В вашем модульном тесте вместо вызова:
foo(my_par1)
Вам следует позвонить:
mock = MagicMock(return_value=42)
with patch('fetch_function', mock):
foo(my_par1)
Вместо «fetch_function», возможно, вам придется написать «my_module.fetch_function», если fetch_function импортирована из модуля.
Смотрите документацию: https://docs.python.org/3/library/unittest.mock-examples.html
Есть несколько способов сделать макет и несколько библиотек, которые могут выполнить эту работу.
3- Создайте прибор Pytest так, чтобы каждый модульный тест выполнялся в базе данных памяти для конкретного теста, которая содержит только тестовые данные.
Это сложнее настроить.