यह कार्यक्रम एक हिप्पोड्रोम की नकल है
आरंभ करने के लिए, पिछले प्रोजेक्ट की तरह, अपने आप को रिपॉजिटरी से एक फोर्क बनाएं: https://github.com/CodeGymCC/hippodrome , और इस फोर्क को स्वयं क्लोन करें।
आपका काम परीक्षण और लॉगिंग जोड़ना है।
आवश्यक परीक्षणों की सूची
निम्नलिखित सूची में, प्रत्येक आइटम को एक अलग परीक्षण विधि के रूप में लागू किया जाना चाहिए। परीक्षण विधियों के नाम के साथ आने पर, संक्षिप्त होने का प्रयास करें, लेकिन साथ ही, ताकि आप मोटे तौर पर समझ सकें कि वास्तव में उनमें क्या परीक्षण किया जा रहा है। उदाहरण के लिए, इन दो परीक्षा परिणामों की तुलना करें:
![](https://cdn.codegym.cc/images/article/bc2ad851-64bf-43e4-b235-5abb1be944a7/512.jpeg)
दूसरे मामले में, यह समझना अधिक कठिन है कि किस प्रकार के परीक्षण पास नहीं हुए, और आपको लॉग देखना होगा।
1. अश्व वर्ग:
- निर्माता
- जांचें कि जब पहले पैरामीटर के रूप में कंस्ट्रक्टर को पास किया जाता है
IllegalArgumentException
, तो उसे फेंक दिया जाएगाnull
। ऐसा करने के लिए, विधि का उपयोग करेंassertThrows
; - जांचें कि जब कंस्ट्रक्टर को पहले पैरामीटर के रूप में पारित किया गया था
null
, तो फेंके गए अपवाद में "नाम शून्य नहीं हो सकता" संदेश होगा। ऐसा करने के लिए, आपको पकड़े गए अपवाद से एक संदेश प्राप्त करने और उपयोग करने की आवश्यकता हैassertEquals
; - जांचें कि जब एक खाली स्ट्रिंग या एक स्ट्रिंग जिसमें केवल व्हाइटस्पेस वर्ण (स्पेस, टैब इत्यादि) शामिल हैं, को कन्स्ट्रक्टर के पहले पैरामीटर के रूप में पारित किया जाएगा। फेंक दिया जाएगा
IllegalArgumentException
। व्हाइटस्पेस वर्णों के विभिन्न रूपों के साथ परीक्षण करने के लिए, आपको परीक्षण को पैरामीटरकृत करने की आवश्यकता है; - जांचें कि जब एक खाली स्ट्रिंग या एक स्ट्रिंग जिसमें केवल व्हाइटस्पेस वर्ण (स्पेस, टैब इत्यादि) शामिल हैं, को कन्स्ट्रक्टर को पहले पैरामीटर के रूप में पारित किया जाता है, तो फेंकने वाले अपवाद में "नाम खाली नहीं हो सकता" संदेश होगा;
- जाँच करें कि जब दूसरे पैरामीटर के रूप में कंस्ट्रक्टर को एक ऋणात्मक संख्या दी जाती है
IllegalArgumentException
; - जांचें कि जब दूसरे पैरामीटर के रूप में कंस्ट्रक्टर को एक नकारात्मक संख्या दी जाती है, तो फेंके गए अपवाद में "गति नकारात्मक नहीं हो सकती" संदेश होगा;
- जांचें कि जब तीसरे पैरामीटर के रूप में कन्स्ट्रक्टर को ऋणात्मक संख्या पारित की जाती है
IllegalArgumentException
; - जाँच करें कि कंस्ट्रक्टर को तीसरे पैरामीटर के रूप में एक ऋणात्मक संख्या पास करते समय, फेंके गए अपवाद में संदेश होगा "दूरी ऋणात्मक नहीं हो सकती।";
- गेटनाम विधि
- जांचें कि विधि उस स्ट्रिंग को लौटाती है जो पहले पैरामीटर के रूप में कंस्ट्रक्टर को दी गई थी;
- गेटस्पीड विधि
- जांचें कि विधि उस संख्या को वापस करती है जो कन्स्ट्रक्टर को दूसरे पैरामीटर के रूप में पारित की गई थी;
- गेटडिस्टेंस विधि
- जांचें कि विधि उस संख्या को वापस करती है जो कन्स्ट्रक्टर को तीसरे पैरामीटर के रूप में पारित की गई थी;
- जांचें कि विधि शून्य लौटाती है यदि ऑब्जेक्ट को दो पैरामीटर वाले कन्स्ट्रक्टर का उपयोग करके बनाया गया था;
- चाल विधि
- जांचें कि विधि विधि के अंदर
getRandomDouble
पैरामीटर 0.2 और 0.9 के साथ कॉल करती है। ऐसा करने के लिए, आपकोMockedStatic
इसकी विधि का उपयोग करने की आवश्यकता हैverify
; - जांचें कि विधि सूत्र द्वारा गणना की गई दूरी मान निर्दिष्ट करती है:
distance + speed * getRandomDouble(0.2, 0.9)
. ऐसा करने के लिए, आपको इसे लॉक करने की आवश्यकता हैgetRandomDouble
ताकि यह कुछ निश्चित मान लौटाए जिन्हें आपको परीक्षण को पैरामीटर करके सेट करने की आवश्यकता है।
2. हिप्पोड्रोम वर्ग:
- निर्माता
- जांचें कि जब कन्स्ट्रक्टर को पास किया गया
IllegalArgumentException
, फेंक दिया जाएगाnull
; - जांचें कि जब कन्स्ट्रक्टर को पास किया गया था
null
, तो फेंके गए अपवाद में संदेश होगा "घोड़े शून्य नहीं हो सकते।"; - जांचें कि कंस्ट्रक्टर को एक खाली सूची पास करते समय, फेंक दिया जाएगा
IllegalArgumentException
; - जांचें कि कंस्ट्रक्टर को एक खाली सूची पास करते समय, फेंके गए अपवाद में संदेश होगा "घोड़े खाली नहीं हो सकते।";
- घोड़ों की विधि प्राप्त करें
- जांचें कि विधि एक सूची लौटाती है जिसमें समान वस्तुएं होती हैं और उसी क्रम में सूची जो कि कंस्ट्रक्टर को पास की गई थी। हिप्पोड्रोम ऑब्जेक्ट बनाते समय , कंस्ट्रक्टर को 30 अलग-अलग घोड़ों की सूची पास करें;
- चाल विधि
- जांचें कि विधि सभी घोड़ों पर चाल विधि को कॉल करती है। हिप्पोड्रोम ऑब्जेक्ट बनाते समय, कंस्ट्रक्टर को 50 नकली घोड़ों की सूची पास करें और
verify
. - गेटविनर विधि
- जांचें कि विधि घोड़े को सबसे बड़ी दूरी मान के साथ लौटाती है।
3. मुख्य वर्ग
- मुख्य विधि
- जांचें कि विधि को 22 सेकंड से अधिक समय तक निष्पादित नहीं किया गया है। ऐसा करने के लिए, टाइमआउट एनोटेशन का उपयोग करें। इस परीक्षण को लिखने के बाद, इसे अक्षम करें (अक्षम एनोटेशन का उपयोग करें)। इसलिए सभी परीक्षणों को चलाने में समय नहीं लगेगा, और यदि आवश्यक हो, तो इसे मैन्युअल रूप से चलाया जा सकता है।
लॉग इन करने की क्या जरूरत है
1. मुख्य वर्ग:
- हिप्पोड्रोम ऑब्जेक्ट बनाने के बाद, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
- विजेताओं के बारे में जानकारी प्रदर्शित करने के बाद, लॉग में इस तरह एक प्रविष्टि जोड़ें:
2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry
हिप्पोड्रोम वर्ग:
- यदि कन्स्ट्रक्टर को शून्य पास किया गया था, तो अपवाद फेंकने से पहले, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
- बी। यदि कंस्ट्रक्टर को एक खाली सूची दी गई थी, तो अपवाद को फेंकने से पहले, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
- कंस्ट्रक्टर के अंत में, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses
3. अश्व वर्ग:
- यदि नाम के बजाय कन्स्ट्रक्टर को शून्य पास किया गया है, तो अपवाद फेंकने से पहले, लॉग में एक प्रविष्टि जोड़ें जैसे:
2022-05-31 17:34:59,483 ERROR Horse: Name is null
- यदि कंस्ट्रक्टर को दिया गया नाम खाली है, तो अपवाद को फेंकने से पहले, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:36:44,196 ERROR Horse: Name is blank
- यदि कंस्ट्रक्टर को दी गई गति शून्य से कम है, तो अपवाद को फेंकने से पहले, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
- यदि कंस्ट्रक्टर को दी गई दूरी शून्य से कम है, तो अपवाद को फेंकने से पहले, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
- कंस्ट्रक्टर के अंत में, लॉग में इस तरह की प्रविष्टि जोड़ें:
2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]
लॉग्स को हिप्पोड्रोम.लॉग फ़ाइल में लिखा जाना चाहिए , जो लॉग फ़ोल्डर में प्रोजेक्ट रूट में स्थित होना चाहिए । हिप्पोड्रोम पैटर्न के अनुसार हर दिन फ़ाइल का नाम बदला जाना चाहिए। 2021-12-31.log और इसके बजाय एक नया हिप्पोड्रोम.लॉग बनाया जाना चाहिए । ऐसा करने के लिए, RollingFile एपेंडर का उपयोग करें । इस स्थिति में, 7 दिनों से अधिक पुरानी फ़ाइलें हटा दी जानी चाहिए। ऐसा करने के लिए, आप एक निर्माण का उपयोग कर सकते हैं जैसे:
<DefaultRolloverStrategy>
<Delete …>
<IfFileName …/>
<IfLastModified …/>
</Delete>
</DefaultRolloverStrategy>
तीन डॉट्स के बजाय क्या बदलना है गूगल किया।😊
परियोजना विश्लेषण । पूरा होने के बाद देखें!