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
मेरे पास प्रकाशन_पुस्तक () में db_entry () फ़ंक्शन कॉल है। हम publish_book के अंदर db_entry () फ़ंक्शन कॉल को कैसे मॉक कर सकते हैं। मैं publish_book () की अन्य गणना करना चाहता हूं, लेकिन केवल db_entry () कॉल को छोड़ें (मॉक करें)।
जवाब
आप मॉक फंक्शन्स के लिए मंकीपैक का इस्तेमाल कर सकते हैं । यहाँ एक उदाहरण है अगर यह आपकी मदद करता है।
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
झूठी वापसी के लिए फ़ंक्शन के मूल्य का मजाक उड़ा रहा हूं । यदि आप चाहते हैं कि लंबोदर का उपयोग करके आप कुछ भी न लौटाने के लिए फंक्शन का मजाक उड़ाने के लिए मंकीपैच का उपयोग कर सकते हैंlambda: None
मुझे यकीन नहीं है कि आपका db_entry फ़ंक्शन क्या करता है, लेकिन यह कहना है कि यह कुछ db क्वेरी कर रहा है और परिणामों की सूची आप मॉक कर सकते हैं जो लौम्बा का उपयोग करके भी लौट सकते हैं lambda: ["foobar"]