सीमा को अलग करें। HTTP कॉल को एक पतले client के पीछे रखें, फिर टेस्ट में उसे fake से बदलें या वहां patch करें जहां वह इस्तेमाल हो रहा है, वहां नहीं जहां परिभाषित है। सेटअप के लिए pytest fixtures और success, failure तथा timeout के मामलों के लिए parametrize इस्तेमाल करें। असली sandbox के खिलाफ कुछ contract tests रखें ताकि mocks पुराने न पड़ जाएं।
इंटरव्यूअर यह क्यों पूछते हैं
इससे इंटरव्यूअर देखते हैं कि आप टेस्ट की सीमाओं और डिजाइन के बारे में कैसे सोचते हैं। जो गहरे अंदरूनी हिस्सों को patch करता है वह बता रहा है कि उसका कोड seam के लिहाज से खराब है। वे pytest की सहजता भी सुनते हैं, यानी fixtures, parametrize और monkeypatch, और यह समझ कि mocks अपने साथ धारणाएं लेकर चलते हैं जो सड़ जाती हैं, तो कभी कभी असली contract की जांच किसी को करनी ही होगी।
अपना जवाब कैसे स्ट्रक्चर करें
- mocking की बात से पहले एक seam डिजाइन करें।
- इस्तेमाल की जगह पर patch करना समझाएं।
- parametrize से failure वाले रास्ते ढकें।
- contract tests से mock के पुराने पड़ने से बचें।
उदाहरण जवाब
टेस्ट करने लायक होना पहले डिजाइन का सवाल है। अगर payment कॉल business logic के अंदर दबी है तो मैं उसे दो चार methods वाली client class में निकाल लेता हूं, और फिर logic उस client को argument की तरह लेती है। उस बिंदु पर ज्यादातर टेस्ट को किसी mocking लाइब्रेरी की जरूरत ही नहीं रहती, क्योंकि मैं एक छोटा fake भेजता हूं जो तयशुदा responses लौटाता है, और वह patch decorators के ढेर से पढ़ने में आसान होता है। जहां मैं patch करता हूं, वहां मैं नाम को टेस्ट होने वाले module में patch करता हूं, लाइब्रेरी वाले module में नहीं, क्योंकि जहां वह परिभाषित है वहां patch करने से कुछ नहीं होता जब वह कहीं और import हो चुका हो। fixtures ऑब्जेक्ट बनाते हैं, और parametrize दिलचस्प मामले ढकता है: approved, declined, timeout और खराब payload, क्योंकि प्रोडक्शन में टूटती failure वाली शाखाएं ही हैं। मैं provider के sandbox के खिलाफ मुट्ठी भर टेस्ट भी रखता हूं, इस तरह टैग किए हुए कि वे हर commit पर नहीं, रात में चलें। उसी ने वह बदलाव पकड़ा जब provider ने ऐसा error code लौटाना शुरू किया जिसे हमने कभी mock ही नहीं किया था।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- mock के अंदरूनी हिस्सों पर assert करने वाले टेस्ट से कैसे बचते हैं?
- MagicMock से बेहतर fake कब होता है?
- retry और backoff के व्यवहार को कैसे टेस्ट करेंगे?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें