Berilgan dastur – ippodrom imitatsiyasi
Boshida, oldingi loyiha kabi, repodan fork qil: https://github.com/pavlo-plynko/hippodrome, va bu forkni o'zingga klonla.
Sening vazifang – testlash va loglash qo'shish.
Zaruriy testlar ro'yhati
Keyingi ro'yhatda har bir nuqtani alohida test metodiga aylantirish kerak. Test metodlariga nom berayotganda, qisqa va ayni paytda nimani test qilayotganini tushunish mumkin bo'lgan nom tanlashga harakat qil. Masalan, quyidagi ikki test natijasini solishtirib ko'r.
Ikkinchi holatda, o'ta olmagan testlar nima ekanligini tushunish qiyin va loglarni ko'rib chiqishga to'g'ri keladi.
1. Horse klassi:
- konstruktor
- Konstruktor birinchi parametri sifatida
nulluzatilganda,IllegalArgumentExceptiontashlanishini tekshirish. Buning uchunassertThrowsmetodidan foydalanish kerak; - Konstruktor birinchi parametri sifatida
nulluzatilganda, tashlangan istisno xabari "Name cannot be null." bo'lishini tekshirish. Buning uchun istisnodan xabarni olish vaassertEqualsmetodidan foydalanish kerak; - Konstruktor birinchi parametri sifatida bo'sh qator yoki faqat bo'shliq belgilar (bo'sh joy, tabulyatsiya va h.k.) uzatilganda,
IllegalArgumentExceptiontashlanishini tekshirish. Bo'shliq belgilar uchun turli variantlarni tekshirish uchun parametrizatsiyalangan test qilish kerak; - Konstruktor birinchi parametri sifatida bo'sh qator yoki faqat bo'shliq belgilar (bo'sh joy, tabulyatsiya va h.k.) uzatilganda, tashlangan istisno xabari "Name cannot be blank." bo'lishini tekshirish;
- Konstruktor ikkinchi parametri sifatida manfiy raqam uzatilganda,
IllegalArgumentExceptiontashlanishini tekshirish; - Konstruktor ikkinchi parametri sifatida manfiy raqam uzatilganda, tashlangan istisno xabari "Speed cannot be negative." bo'lishini tekshirish;
- Konstruktor uchinchi parametri sifatida manfiy raqam uzatilganda,
IllegalArgumentExceptiontashlanishini tekshirish; - Konstruktor uchinchi parametri sifatida manfiy raqam uzatilganda, tashlangan istisno xabari "Distance cannot be negative." bo'lishini tekshirish;
- getName metodi
- Metod konstruktor birinchi parametriga uzatilgan qatorni qaytarishini tekshirish;
- getSpeed metodi
- Metod konstruktor ikkinchi parametriga uzatilgan raqamni qaytarishini tekshirish;
- getDistance metodi
- Metod konstruktor uchinchi parametriga uzatilgan raqamni qaytarishini tekshirish;
- Ob'ekt ikki parametrli konstruktor yordamida yaratilganda, metod nolni qaytarishini tekshirish;
- move metodi
- Metod ichida
getRandomDoublemetodi 0.2 va 0.9 parametrlari bilan chaqirilishini tekshirish. Buning uchunMockedStaticva uningverifymetodidan foydalanish kerak; - Metod
distance + speed * getRandomDouble(0.2, 0.9)formula orqali hisoblangan qiymatni masofaga tayinlashini tekshirish. Buning uchungetRandomDoublemetodini mock qilish va qaytariladigan qiymatlarni parametrizatsiya orqali belgilash kerak.
2. Hippodrome klassi:
- Konstruktor
- Konstruktor
nullqabul qilganda,IllegalArgumentExceptiontashlanishini tekshirish; - Konstruktor
nullqabul qilganda, tashlangan istisno xabari "Horses cannot be null." bo'lishini tekshirish; - Konstruktor bo'sh ro'yhat qabul qilganda,
IllegalArgumentExceptiontashlanishini tekshirish; - Konstruktor bo'sh ro'yhat qabul qilganda, tashlangan istisno xabari "Horses cannot be empty." bo'lishini tekshirish;
- getHorses metodi
- Metod konstruktor qabul qilgan ro'yhatdagi ob'ektlar va ularning ketma-ketligini o'z ichiga olgan ro'yhatni qaytarishini tekshirish. Hippodrome ob'ektini yaratishda konstruktorida 30 xil otlardan iborat ro'yhat yuboring;
- move metodi
- Metod barcha otlar uchun move metodini chaqirishini tekshirish. Hippodrome ob'ektini yaratishda konstruktorida 50 ta ot mockidan iborat ro'yhat yuborib,
verifymetodidan foydalaning. - getWinner metodi
- Metod eng katta distance qiymatiga ega otni qaytarishini tekshirish.
3. Main klassi
- main metodi
- Metod 22 soniyadan ortiq davom etmasligini tekshirish. Buning uchun Timeout annotatsiyasidan foydalan. Bu test yozilgandan keyin uni o'chirib qo'y (Disabled annotatsiyasidan foydalan). Shu tarzda u barcha testlar ishga tushirilayotganda vaqtni olmaydi, lekin kerak bo'lganda qo'lda ishga tushirilishi mumkin.
Nimani logga yozish kerak
1. Main klassi:
- Ippodrom ob'ekti yaratilgandan so'ng, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:05:26,152 INFO Main: Poyga boshlanishi. Ishtirokchilar soni: 7 - G'olib haqida ma'lumot chiqarilgandan so'ng, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:05:46,963 INFO Main: Poyga tugadi. G'olib: Vishnya
Hippodrome klassi:
- Agar konstruktorga null uzatilsa, istisno tashlanishidan oldin, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null - b. Agar konstruktorga bo'sh ro'yhat uzatilsa, istisno tashlanishidan oldin, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty - Konstruktor oxirida logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:05:26,152 DEBUG Hippodrome: Hippodrome yaratish, otlar [7]
3. Horse klassi:
- Agar konstruktorga ism o'rniga null uzatilsa, istisno tashlanishidan oldin, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:34:59,483 ERROR Horse: Name is null - Konstruktorga uzatilgan ism bo'sh bo'lsa, istisno tashlanishidan oldin, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:36:44,196 ERROR Horse: Name is blank - Konstruktorga uzatilgan tezlik noldan kichik bo'lsa, istisno tashlanishidan oldin, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative - Konstruktorga uzatilgan masofa noldan kichik bo'lsa, istisno tashlanishidan oldin, logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative - Konstruktor oxirida logga quyidagi tarzda yozuv qo'shish:
2022-05-31 17:15:25,842 DEBUG Horse: Horse yaratish, ism [Lobster], tezlik [2.8]
Loglar hippodrome.log faylida yozilishi kerak, bu fayl loyiha ildizida logs papkasida joylashgan bo'lishi kerak. Har kuni fayl hippodrome.2021-12-31.log tarzida nomlanib, yangi hippodrome.log yaratilishi kerak. Buning uchun RollingFile appenderidan foydalan. Shu bilan birga, 7 kundan ortiq bo'lgan fayllar o'chirilishi kerak. Buning uchun quyidagi tuzilmani ishlatishingiz mumkin:
<DefaultRolloverStrategy>
<Delete …>
<IfFileName …/>
<IfLastModified …/>
</Delete>
</DefaultRolloverStrategy>
Qanday qilib uch nuqtalarning o'rniga nima qo'yilishi kerakligini google'dan qidir.😊
Loyihani tahlil qilish. Bajarilgandan keyin ko'ring!
GO TO FULL VERSION