हा कार्यक्रम हिप्पोड्रोमचे अनुकरण आहे

सुरूवातीस, मागील प्रकल्पाप्रमाणे, रिपॉजिटरीमधून स्वतःला एक काटा बनवा: https://github.com/CodeGymCC/hippodrome , आणि हा काटा स्वतः क्लोन करा.

तुमचे कार्य चाचणी आणि लॉगिंग जोडणे आहे.

आवश्यक चाचण्यांची यादी

खालील सूचीमध्ये, प्रत्येक आयटमची स्वतंत्र चाचणी पद्धत म्हणून अंमलबजावणी करणे आवश्यक आहे. चाचणी पद्धतींसाठी नावे आणताना, संक्षिप्त होण्याचा प्रयत्न करा, परंतु त्याच वेळी, जेणेकरुन तुम्हाला त्यात नेमके काय तपासले जात आहे हे समजू शकेल. उदाहरणार्थ, या दोन चाचणी परिणामांची तुलना करा:

दुसऱ्या प्रकरणात, कोणत्या प्रकारच्या चाचण्या पास झाल्या नाहीत हे समजून घेणे अधिक कठीण आहे आणि आपल्याला लॉग पहावे लागतील.

1. घोडा वर्ग:

  1. बांधकाम करणारा
    • प्रथम पॅरामीटर म्हणून कन्स्ट्रक्टरला पास केल्यावर IllegalArgumentExceptionफेकले जाईल हे तपासा null. हे करण्यासाठी, पद्धत वापरा assertThrows;
    • प्रथम पॅरामीटर म्हणून कन्स्ट्रक्टरला पास केल्यावर null, फेकलेल्या अपवादामध्ये "नाव शून्य असू शकत नाही" असा संदेश असेल हे तपासा. हे करण्यासाठी, आपल्याला पकडलेल्या अपवादाकडून संदेश प्राप्त करणे आवश्यक आहे आणि वापरणे आवश्यक आहे assertEquals;
    • कंस्ट्रक्टरला पहिले पॅरामीटर म्हणून रिक्त स्ट्रिंग किंवा फक्त व्हाइटस्पेस अक्षरे (स्पेस, टॅब, इ.) असलेली स्ट्रिंग पास करताना, फेकले जाईल हे तपासा IllegalArgumentException. व्हाईटस्पेस वर्णांच्या विविध रूपांसह चाचणी करण्यासाठी, तुम्हाला चाचणी पॅरामीटराइज्ड करणे आवश्यक आहे;
    • प्रथम पॅरामीटर म्हणून रिकामी स्ट्रिंग किंवा फक्त व्हाइटस्पेस वर्ण (स्पेस, टॅब, इ.) असलेली स्ट्रिंग कन्स्ट्रक्टरला पास करताना, फेकलेल्या अपवादामध्ये "नाव रिक्त असू शकत नाही" असा संदेश असेल हे तपासा;
    • जेव्हा कन्स्ट्रक्टरला दुसरा पॅरामीटर म्हणून ऋण संख्या पास केली जाते तेव्हा तपासा, IllegalArgumentException;
    • जेव्हा कन्स्ट्रक्टरला दुसरा पॅरामीटर म्हणून ऋण संख्या पास केली जाते, तेव्हा फेकलेल्या अपवादामध्ये "स्पीड नकारात्मक असू शकत नाही" असा संदेश असेल हे तपासा;
    • तिसरा पॅरामीटर म्हणून कन्स्ट्रक्टरला ऋण संख्या पास केल्यावर तपासा, IllegalArgumentException;
    • कन्स्ट्रक्टरला तिसरा पॅरामीटर म्हणून ऋण संख्या पास करताना, फेकलेल्या अपवादामध्ये "अंतर ऋण असू शकत नाही" असा संदेश असेल हे तपासा;
  2. getName पद्धत
    • पद्धत कन्स्ट्रक्टरला प्रथम पॅरामीटर म्हणून पास केलेली स्ट्रिंग परत करते हे तपासा;
  3. गेटस्पीड पद्धत
    • पद्धत कन्स्ट्रक्टरला दुसरा पॅरामीटर म्हणून पास केलेला नंबर परत करते हे तपासा;
  4. getDistance पद्धत
    • तपासा की पद्धत कंस्ट्रक्टरला तिसरा पॅरामीटर म्हणून पास केलेला नंबर परत करते;
    • दोन पॅरामीटर्ससह कन्स्ट्रक्टर वापरून ऑब्जेक्ट तयार केला असल्यास पद्धत शून्य देते हे तपासा;
  5. हलवा पद्धत
    • getRandomDouble0.2 आणि 0.9 पॅरामीटर्ससह पद्धत पद्धतमध्ये कॉल करते हे तपासा . हे करण्यासाठी, आपल्याला MockedStaticत्याची पद्धत वापरण्याची आवश्यकता आहे verify;
    • पद्धत सूत्राद्वारे मोजलेले अंतर मूल्य नियुक्त करते हे तपासा: distance + speed * getRandomDouble(0.2, 0.9). हे करण्यासाठी, तुम्हाला ते लॉक करणे आवश्यक आहे getRandomDoubleजेणेकरुन ते चाचणीचे पॅरामीटराइझिंग करून सेट करणे आवश्यक असलेली विशिष्ट मूल्ये परत करेल.

2. हिप्पोड्रोम वर्ग:

  1. कन्स्ट्रक्टर
    • कन्स्ट्रक्टरला पास केल्यावर IllegalArgumentException; फेकले जाईल हे तपासा null;
    • कन्स्ट्रक्टरला पास केल्यावर null, टाकलेल्या अपवादामध्ये "घोडे शून्य असू शकत नाहीत" असा संदेश असेल हे तपासा;
    • कंस्ट्रक्टरला रिकामी यादी देताना, ; टाकले जाईल हे तपासा IllegalArgumentException;
    • कन्स्ट्रक्टरला रिक्त यादी पास करताना, फेकलेल्या अपवादामध्ये "घोडे रिकामे असू शकत नाहीत" असा संदेश असेल हे तपासा;
  2. getHorses पद्धत
    • पद्धत कंस्ट्रक्टरला पाठवलेल्या सूचीप्रमाणे समान ऑब्जेक्ट्स असलेली आणि त्याच क्रमाने सूची परत करते हे तपासा. हिप्पोड्रोम ऑब्जेक्ट तयार करताना , कन्स्ट्रक्टरला 30 वेगवेगळ्या घोड्यांची यादी द्या;
  3. हलवा पद्धत
    • ही पद्धत सर्व घोड्यांवर चालण्याची पद्धत आहे हे तपासा. हिप्पोड्रोम ऑब्जेक्ट तयार करताना, कंस्ट्रक्टरला 50 मॉक हॉर्सची यादी द्या आणि वापरा verify.
  4. getWinner पद्धत
    • ही पद्धत सर्वात मोठ्या अंतर मूल्यासह घोडा परत करते हे तपासा.

3. मुख्य वर्ग

  1. मुख्य पद्धत
    • पद्धत 22 सेकंदांपेक्षा जास्त काळ चालविली जात नाही हे तपासा. हे करण्यासाठी, कालबाह्य भाष्य वापरा. ही चाचणी लिहिल्यानंतर, ते अक्षम करा (अक्षम भाष्य वापरा). त्यामुळे सर्व चाचण्या चालवायला वेळ लागणार नाही आणि आवश्यक असल्यास ते स्वतः चालवता येईल.

काय लॉग करणे आवश्यक आहे

1. मुख्य वर्ग:

  1. हिप्पोड्रोम ऑब्जेक्ट तयार केल्यानंतर, लॉगमध्ये यासारखी एंट्री जोडा:2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
  2. विजेत्यांबद्दल माहिती प्रदर्शित केल्यानंतर, लॉगमध्ये यासारखी एंट्री जोडा:2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry

हिप्पोड्रोम वर्ग:

  1. जर कन्स्ट्रक्टरला नल पास केले गेले असेल, तर अपवाद टाकण्यापूर्वी, लॉगमध्ये अशी एंट्री जोडा:2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. b जर रिकामी यादी कन्स्ट्रक्टरला दिली गेली असेल, तर अपवाद टाकण्यापूर्वी, लॉगमध्ये अशी नोंद जोडा:2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
  3. कन्स्ट्रक्टरच्या शेवटी, लॉगमध्ये अशी एंट्री जोडा:2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses

3. घोडा वर्ग:

  1. जर नावाऐवजी नल कंस्ट्रक्टरला दिले असेल, तर अपवाद टाकण्यापूर्वी, लॉगमध्ये एक एंट्री जोडा जसे की:2022-05-31 17:34:59,483 ERROR Horse: Name is null
  2. जर कन्स्ट्रक्टरला दिलेले नाव रिकामे असेल, तर अपवाद टाकण्यापूर्वी, लॉगमध्ये अशी एंट्री जोडा:2022-05-31 17:36:44,196 ERROR Horse: Name is blank
  3. जर कन्स्ट्रक्टरला दिलेला वेग शून्यापेक्षा कमी असेल, तर अपवाद टाकण्यापूर्वी, लॉगमध्ये यासारखी एंट्री जोडा:2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. जर कन्स्ट्रक्टरला दिलेले अंतर शून्यापेक्षा कमी असेल, तर अपवाद टाकण्यापूर्वी, लॉगमध्ये यासारखी एंट्री जोडा:2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
  5. कन्स्ट्रक्टरच्या शेवटी, लॉगमध्ये अशी एंट्री जोडा:2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]

लॉग हे hippodrome.log फाईलमध्ये लिहिले जावे , जे लॉग फोल्डरमधील प्रोजेक्ट रूटमध्ये स्थित असावे . दररोज फाइलचे नाव hippodrome.2021-12-31.log या पॅटर्ननुसार बदलले पाहिजे आणि त्याऐवजी नवीन hippodrome.log तयार केले जावे . हे करण्यासाठी, रोलिंगफाइल परिशिष्ट वापरा . या प्रकरणात, 7 दिवसांपेक्षा जुन्या फायली हटविल्या पाहिजेत. हे करण्यासाठी, आपण रचना वापरू शकता जसे:

<DefaultRolloverStrategy>
    <Delete>
        <IfFileName/>
        <IfLastModified/>
    </Delete>
</DefaultRolloverStrategy>

तीन ठिपक्यांऐवजी काय बदलायचे ते Google केले.😊


प्रकल्प विश्लेषण . पूर्ण झाल्यानंतर पहा!