unit testing - JUnit Tests: User Input -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 7 जवाब

वर्तमान में JUnit परीक्षण लिख रहे हैं लेकिन हो रही है उपयोगकर्ता इनपुट पर भरोसा रखने वाले तरीकों का परीक्षण करने के लिए आते समय फंस जाता है क्या एक तरीका है कि मैं परीक्षण विधि में 'नकली' उपयोगकर्ता इनपुट कर सकता हूं? मेरे पास ऐसा कुछ है (मैं वास्तविक कोड पेस्ट नहीं किया क्योंकि विधि काफी लंबी है, और समस्या को समझने के दायरे से परे भी जाती है, हालांकि, मैं उपयोगकर्ता इनपुट के लिए पूछता हूं, और यदि यह गलत है, तो मैं इसे फिर से पूछता हूं जब तक सही मान दर्ज नहीं किया जाता है):

  सार्वजनिक शून्य विधि () {System.out.println ("कुछ लिखें"); Int a = स्कैनर.एक्सआईटी (); के लिए (;;) {if (a! = 10) {System.out.println ("कृपया अन्य मान दर्ज करें!"); एक = sc.nextInt (); अन्य {ब्रेक; }} // आगे कोड}  

क्योंकि यह इंटरैक्टिव है, यह संभवतः कठिन होगा

समान कोड का परीक्षण करने का एक आम तरीका एक ऐसी विधि को निकालना होगा जो एक स्कैनर और प्रिंटवेयर में लेता है, और इसी तरह की परीक्षा कि:

  सार्वजनिक शून्य विधि () {विधि (नई स्कैनर (System.in), System.out); }  /** परीक्षण के लिए। * / सार्वजनिक शून्य विधि (स्कैनर स्कैनर, प्रिंटवेयर आउटपुट) {output.println ("कुछ लिखें"); Int a = स्कैनर.एक्सआईटी (); // ...}  

यह समान है, लेकिन बहुत अधिक पूर्वानुमान है, और कम सफाई की आवश्यकता है। हालांकि, दोनों स्थितियों में, इनपुट की प्रतीक्षा करते समय nextInt जैसी विधियां अवरुद्ध हो जाएंगी जब तक आप इस परीक्षण को बहुस्तरीय बनाना नहीं चाहते (जो जटिल है), आप अंत तक अपने आउटपुट को पढ़ने में सक्षम नहीं होंगे, और आपको अपने सभी निर्देशों को सामने से निर्दिष्ट करना होगा:

 < कोड> @Test सार्वजनिक शून्य विधिशौल्डलैंकथीस्पेशशटल () {स्ट्रिंग वाइटर आउटपुट = नया स्ट्रिंगर्राइटर (); स्ट्रिंग इनपुट = "5 \ n" // "कृपया अन्य मान दर्ज करें!" + "10 \ n" // "कोड स्वीकार किया गया। आदेश दर्ज करें:" + "शटल \ n"; // "अंतरिक्ष शटल लॉन्च कर रहा है ..." systemUnderTest.method (नया स्कैनर (इनपुट), नया प्रिंटवायर (आउटपुट)); AssertThat (output.toString (), शामिल है ("कृपया एक और मूल्य दर्ज करें!")); assertTrue (systemUnderTest.spaceShuttleLaunched ()); }  

उस समय तक कहा गया, जब तक कि आपके निर्देशों का सेट सीधा (और बदलता नहीं) हो, तो आप शायद टिप्पणी (ऊपर के रूप में) जोड़ सकते हैं और एक उपयुक्त परीक्षा प्राप्त कर सकते हैं जो आपका कोड बढ़ता है

(ध्यान दें: बेशक, अधिभार पद्धति बनाने के बजाय, आप परीक्षण के तहत आपके सिस्टम में "स्कैनर" और "आउटपुट" को अस्थिर कर सकते हैं। मैं कक्षाओं को यथास्थिति के रूप में रखने की कोशिश करता हूं, लेकिन यदि यह आपके या आपके सहकर्मियों / प्रशिक्षक के लिए महत्वपूर्ण है तो यह बहुत बड़ी रियायत नहीं है।)


Comments

Popular posts from this blog

uislider - In a MATLAB GUI, how does one implement a continuously varying slider from a GUIDE created .m file? -

python - Django Custom Admin Block For center of admin -

Editing Python Class in Shell and SQLAlchemy -