मैं अजगर mock.patch का उपयोग कर रहा हूं और प्रत्येक कॉल के लिए वापसी मूल्य बदलना चाहूंगा। यहां चेतावनी दी गई है: पैच किए जा रहे फ़ंक्शन में कोई इनपुट नहीं है, इसलिए मैं इनपुट के आधार पर रिटर्न मान नहीं बदल सकता।
यहाँ संदर्भ के लिए मेरा कोड है।
def get_boolean_response():
response = io.prompt('y/n').lower()
while response not in ('y', 'n', 'yes', 'no'):
io.echo('Not a valid input. Try again'])
response = io.prompt('y/n').lower()
return response in ('y', 'yes')
मेरा टेस्ट कोड:
@mock.patch('io')
def test_get_boolean_response(self, mock_io):
#setup
mock_io.prompt.return_value = ['x','y']
result = operations.get_boolean_response()
#test
self.assertTrue(result)
self.assertEqual(mock_io.prompt.call_count, 2)
io.prompt
केवल एक प्लेटफ़ॉर्म स्वतंत्र (अजगर 2 और 3) "इनपुट" संस्करण है। इसलिए अंततः मैं यूजर्स के इनपुट का मजाक बनाने की कोशिश कर रहा हूं। मैंने वापसी मूल्य के लिए एक सूची का उपयोग करने की कोशिश की है, लेकिन यह काम करने के लिए सीवन नहीं करता है।
आप देख सकते हैं कि यदि रिटर्न वैल्यू कुछ अमान्य है, तो मुझे यहाँ एक अनंत लूप मिलेगा। इसलिए मुझे अंततः वापसी मूल्य को बदलने का एक तरीका चाहिए, ताकि मेरा परीक्षण वास्तव में समाप्त हो जाए।
(इस सवाल का जवाब देने का एक और संभावित तरीका यह समझाने के लिए हो सकता है कि मैं यूनिट-टेस्ट में उपयोगकर्ता इनपुट की नकल कैसे कर सकता हूं)
मुख्य रूप से इस सवाल का एक हिस्सा नहीं है क्योंकि मैं आदानों को अलग करने की क्षमता नहीं है।
इस प्रश्न पर उत्तर की टिप्पणियों में से एक समान लाइनों के साथ है, लेकिन कोई उत्तर / टिप्पणी प्रदान नहीं की गई है।
is
स्ट्रिंग शाब्दिकों की तुलना करने के लिए उपयोग करने का प्रयास कर रहे हैं । ऐसा मत करो। तथ्य यह है कि यह काम करता है (कभी-कभी) केवल CPython में एक कार्यान्वयन विवरण है। इसके अलावा, response is not 'y' or 'n' or 'yes' or 'no'
शायद वह नहीं कर रहा है जो आपको लगता है कि यह है ...
response is not 'y' or 'n' or 'yes' or 'no'
में नहीं कर रही है तुम्हें क्या लगता है यह करता है। देखें कि मैं एक चर को कई मानों के खिलाफ कैसे जांच सकता हूं? और आप चाहिए नहीं का उपयोगis
स्ट्रिंग मूल्यों, उपयोग तुलना करने के लिए==
तुलना करने के लिए मूल्यों , नहीं वस्तु पहचान।