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
    


मेरे पास प्रकाशन_पुस्तक () में db_entry () फ़ंक्शन कॉल है। हम publish_book के अंदर db_entry () फ़ंक्शन कॉल को कैसे मॉक कर सकते हैं। मैं publish_book () की अन्य गणना करना चाहता हूं, लेकिन केवल db_entry () कॉल को छोड़ें (मॉक करें)।

जवाब

3 Noname Nov 25 2020 at 16:48

आप मॉक फंक्शन्स के लिए मंकीपैक का इस्तेमाल कर सकते हैं । यहाँ एक उदाहरण है अगर यह आपकी मदद करता है।

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"]