pytest를 사용하여 다른 함수 내에서 함수 호출을 모의하는 방법은 무엇입니까?
Nov 25 2020
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
publish_book ()에 db_entry () 함수 호출이 있습니다. publish_book 내부에서 db_entry () 함수 호출을 어떻게 모의 할 수 있습니까? publish_book ()의 다른 계산을 수행하고 싶지만 db_entry () 호출 만 건너 뛰 (mock)합니다.
답변
3 Noname Nov 25 2020 at 16:48
monkeypatch 를 사용 하여 함수를 모의 할 수 있습니다 . 도움이된다면 여기에 예가 있습니다.
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)
두 번째 주장을 수행하기 전에 볼 수 있듯이 db_entry
함수 값을 조롱하여 false를 반환합니다. 람다를 사용하여 원하는 경우 monkeypatch를 사용하여 함수를 모의하여 아무것도 반환하지 않을 수 있습니다.lambda: None
나는 당신의 db_entry 함수가 무엇을하는지 잘 모르겠지만 일부 db 쿼리를 수행하고 결과 목록을 반환한다고 말하면서 반환하여 람다를 사용하여 조롱 할 수 있습니다. lambda: ["foobar"]