Jak mockować wywołanie funkcji wewnątrz innej funkcji przy użyciu pytest?
def publish_book(publisher):
# some calculations
factor = 4
print('xyz')
db_entry(factor) # db entry call which I want to mock
print('abc')
def update():
publish_book('xyz')
@pytest.mark.django_db
def test_update(mocker):
# in here I'm unable to mock nested function call
pass
Mam wywołanie funkcji db_entry () w public_book (). jak możemy mockować wywołanie funkcji db_entry () wewnątrz public_book. Chcę wykonać inne obliczenia z Publishing_book (), ale tylko pominąć (udawać) wywołanie db_entry ().
Odpowiedzi
Możesz użyć monkeypatch do mockowania funkcji. Oto przykład, jeśli ci to pomoże.
def db_entry():
return True
def add_num(x, y):
return x + y
def get_status(x, y):
if add_num(x, y) > 5 and db_entry() is True:
return True
else:
return False
def test_get_stats(monkeypatch):
assert get_status(3, 3)
monkeypatch.setattr("pytest_fun.db_entry", lambda: False)
assert not get_status(3, 3)
Jak widać przed wykonaniem drugiej asercji, kpię z wartości db_entry
funkcji, aby zwrócić fałsz. Możesz użyć monkeypatch, aby mockować funkcję, aby nic nie zwracała, jeśli chcesz, używając lambda podobnego dolambda: None
Nie jestem pewien, co robi twoja funkcja db_entry, ale mówię, że wykonuje zapytanie o bazę danych i zwraca listę wyników, które możesz wyszydzić, używając lambdy, zwracając lambda: ["foobar"]