JavaRush /Kurslar /All lectures for UZ purposes /Loyiha mavzusi: testlash va loglash

Loyiha mavzusi: testlash va loglash

All lectures for UZ purposes
Daraja, Dars
Mavjud

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:

  1. konstruktor
    • Konstruktor birinchi parametri sifatida null uzatilganda, IllegalArgumentException tashlanishini tekshirish. Buning uchun assertThrows metodidan foydalanish kerak;
    • Konstruktor birinchi parametri sifatida null uzatilganda, tashlangan istisno xabari "Name cannot be null." bo'lishini tekshirish. Buning uchun istisnodan xabarni olish va assertEquals metodidan foydalanish kerak;
    • Konstruktor birinchi parametri sifatida bo'sh qator yoki faqat bo'shliq belgilar (bo'sh joy, tabulyatsiya va h.k.) uzatilganda, IllegalArgumentException tashlanishini 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, IllegalArgumentException tashlanishini 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, IllegalArgumentException tashlanishini tekshirish;
    • Konstruktor uchinchi parametri sifatida manfiy raqam uzatilganda, tashlangan istisno xabari "Distance cannot be negative." bo'lishini tekshirish;
  2. getName metodi
    • Metod konstruktor birinchi parametriga uzatilgan qatorni qaytarishini tekshirish;
  3. getSpeed metodi
    • Metod konstruktor ikkinchi parametriga uzatilgan raqamni qaytarishini tekshirish;
  4. getDistance metodi
    • Metod konstruktor uchinchi parametriga uzatilgan raqamni qaytarishini tekshirish;
    • Ob'ekt ikki parametrli konstruktor yordamida yaratilganda, metod nolni qaytarishini tekshirish;
  5. move metodi
    • Metod ichida getRandomDouble metodi 0.2 va 0.9 parametrlari bilan chaqirilishini tekshirish. Buning uchun MockedStatic va uning verify metodidan foydalanish kerak;
    • Metod distance + speed * getRandomDouble(0.2, 0.9) formula orqali hisoblangan qiymatni masofaga tayinlashini tekshirish. Buning uchun getRandomDouble metodini mock qilish va qaytariladigan qiymatlarni parametrizatsiya orqali belgilash kerak.

2. Hippodrome klassi:

  1. Konstruktor
    • Konstruktor null qabul qilganda, IllegalArgumentException tashlanishini tekshirish;
    • Konstruktor null qabul qilganda, tashlangan istisno xabari "Horses cannot be null." bo'lishini tekshirish;
    • Konstruktor bo'sh ro'yhat qabul qilganda, IllegalArgumentException tashlanishini tekshirish;
    • Konstruktor bo'sh ro'yhat qabul qilganda, tashlangan istisno xabari "Horses cannot be empty." bo'lishini tekshirish;
  2. 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;
  3. move metodi
    • Metod barcha otlar uchun move metodini chaqirishini tekshirish. Hippodrome ob'ektini yaratishda konstruktorida 50 ta ot mockidan iborat ro'yhat yuborib, verify metodidan foydalaning.
  4. getWinner metodi
    • Metod eng katta distance qiymatiga ega otni qaytarishini tekshirish.

3. Main klassi

  1. 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:

  1. 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
  2. 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:

  1. 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
  2. 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
  3. Konstruktor oxirida logga quyidagi tarzda yozuv qo'shish: 2022-05-31 17:05:26,152 DEBUG Hippodrome: Hippodrome yaratish, otlar [7]

3. Horse klassi:

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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!

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION