Ang program na ito ay isang imitasyon ng isang hippodrome

Upang magsimula sa, tulad ng sa nakaraang proyekto, gawin ang iyong sarili ng isang tinidor mula sa repositoryo: https://github.com/CodeGymCC/hippodrome , at i-clone ang tinidor na ito sa iyong sarili.

Ang iyong gawain ay magdagdag ng pagsubok at pag-log.

Listahan ng mga kinakailangang pagsusulit

Sa sumusunod na listahan, dapat ipatupad ang bawat item bilang isang hiwalay na paraan ng pagsubok. Kapag nag-iisip ng mga pangalan para sa mga pamamaraan ng pagsubok, subukang maging maigsi, ngunit sa parehong oras, upang halos maunawaan mo kung ano ang eksaktong sinusuri sa kanila. Halimbawa, ihambing ang dalawang resulta ng pagsubok na ito:

Sa pangalawang kaso, mas mahirap maunawaan kung anong uri ng mga pagsubok ang hindi pumasa, at kailangan mong tingnan ang mga log.

1. Klase ng kabayo:

  1. tagabuo
    • Suriin na kapag naipasa sa constructor bilang ang unang parameter IllegalArgumentException, ay itatapon null. Upang gawin ito, gamitin ang pamamaraan assertThrows;
    • Suriin na kapag ipinasa sa constructor bilang unang parameter null, ang itinapon na exception ay maglalaman ng mensaheng "Ang pangalan ay hindi maaaring null.". Upang gawin ito, kailangan mong makakuha ng mensahe mula sa nahuli na pagbubukod at gamitin ang assertEquals;
    • Suriin na kapag nagpapasa ng walang laman na string o string na naglalaman lamang ng mga whitespace na character (espasyo, tab, atbp.) bilang unang parameter sa constructor, . ay itatapon IllegalArgumentException. Upang subukan gamit ang iba't ibang variant ng mga character na whitespace, kailangan mong gawing parameterize ang pagsubok;
    • Suriin na kapag nagpapasa ng walang laman na string o string na naglalaman lamang ng mga character na whitespace (espasyo, tab, atbp.) sa constructor bilang unang parameter, ang itinapon na exception ay maglalaman ng mensaheng "Hindi maaaring blangko ang pangalan.";
    • Suriin na kapag ang isang negatibong numero ay ipinasa sa constructor bilang pangalawang parameter, IllegalArgumentException;
    • Suriin na kapag ang isang negatibong numero ay ipinasa sa tagabuo bilang pangalawang parameter, ang itinapon na pagbubukod ay maglalaman ng mensaheng "Ang bilis ay hindi maaaring negatibo.";
    • Suriin na kapag ang isang negatibong numero ay ipinasa sa constructor bilang ikatlong parameter, IllegalArgumentException;
    • Suriin na kapag nagpapasa ng negatibong numero bilang pangatlong parameter sa constructor, ang itinapon na exception ay maglalaman ng mensaheng "Hindi maaaring negatibo ang distansya.";
  2. paraan ng getName
    • Suriin na ibinabalik ng pamamaraan ang string na ipinasa bilang unang parameter sa constructor;
  3. paraan ng getSpeed
    • Suriin na ibinalik ng pamamaraan ang numerong naipasa bilang pangalawang parameter sa constructor;
  4. getDistance method
    • Suriin na ibinabalik ng pamamaraan ang numerong naipasa bilang ikatlong parameter sa constructor;
    • Suriin na ang pamamaraan ay nagbabalik ng zero kung ang bagay ay nilikha gamit ang isang constructor na may dalawang parameter;
  5. paraan ng paglipat
    • Suriin na ang pamamaraan ay tumatawag sa loob ng pamamaraan getRandomDoublena may mga parameter na 0.2 at 0.9. Upang gawin ito, kailangan mong gamitin MockedStaticang pamamaraan nito verify;
    • Suriin na ang pamamaraan ay nagtatalaga ng halaga ng distansya na kinakalkula ng formula: distance + speed * getRandomDouble(0.2, 0.9). Upang gawin ito, kailangan mong i-lock ito getRandomDoubleupang maibalik nito ang ilang mga halaga na kailangan mong itakda sa pamamagitan ng pag-parameter sa pagsubok.

2. Klase ng hippodrome:

  1. Tagabuo
    • Suriin na kapag naipasa sa constructor IllegalArgumentException, ; ay itatapon null;
    • Suriin na kapag ipinasa sa constructor null, ang exception thrown ay maglalaman ng mensaheng "Horses cannot be null.";
    • Suriin na kapag nagpapasa ng isang walang laman na listahan sa constructor, ; ay itatapon IllegalArgumentException;
    • Suriin na kapag nagpapasa ng isang walang laman na listahan sa tagabuo, ang itinapon na pagbubukod ay maglalaman ng mensaheng "Ang mga kabayo ay hindi maaaring walang laman.";
  2. paraan ng getHorses
    • Suriin na ang pamamaraan ay nagbabalik ng isang listahan na naglalaman ng parehong mga bagay at sa parehong pagkakasunud-sunod ng listahan na ipinasa sa constructor. Kapag lumilikha ng bagay na Hippodrome , ipasa ang isang listahan ng 30 iba't ibang mga kabayo sa tagabuo;
  3. paraan ng paglipat
    • Suriin na ang pamamaraan ay tinatawag na paraan ng paglipat sa lahat ng mga kabayo. Kapag gumagawa ng Hippodrome object, ipasa ang isang listahan ng 50 mock horse sa constructor at gamitin ang verify.
  4. getWinner method
    • Suriin na ibinabalik ng pamamaraan ang kabayo na may pinakamalaking halaga ng distansya.

3. Pangunahing klase

  1. pangunahing pamamaraan
    • Suriin na ang pamamaraan ay naisakatuparan nang hindi hihigit sa 22 segundo. Upang gawin ito, gamitin ang Timeout na anotasyon. Pagkatapos isulat ang pagsubok na ito, huwag paganahin ito (gamitin ang Disabled annotation). Kaya't hindi magtatagal upang patakbuhin ang lahat ng mga pagsubok, at kung kinakailangan, maaari itong patakbuhin nang manu-mano.

Ano ang kailangang i-log

1. Pangunahing klase:

  1. Pagkatapos gawin ang hippodrome object, magdagdag ng entry na tulad nito sa log:2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
  2. Pagkatapos ipakita ang impormasyon tungkol sa mga nanalo, magdagdag ng entry na tulad nito sa log:2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry

Klase ng hippodrome:

  1. Kung ang null ay naipasa sa constructor, pagkatapos bago ihagis ang exception, magdagdag ng isang entry na tulad nito sa log:2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. b. Kung ang isang walang laman na listahan ay naipasa sa tagabuo, pagkatapos bago ihagis ang pagbubukod, magdagdag ng isang entry na tulad nito sa log:2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
  3. Sa dulo ng constructor, magdagdag ng entry na tulad nito sa log:2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses

3. Klase ng kabayo:

  1. Kung ang null ay ipinasa sa constructor sa halip na isang pangalan, pagkatapos bago ihagis ang exception, magdagdag ng isang entry sa log tulad ng:2022-05-31 17:34:59,483 ERROR Horse: Name is null
  2. Kung ang pangalan na ipinasa sa constructor ay walang laman, pagkatapos ay bago ihagis ang exception, magdagdag ng isang entry na tulad nito sa log:2022-05-31 17:36:44,196 ERROR Horse: Name is blank
  3. Kung ang bilis na ipinasa sa constructor ay mas mababa sa zero, pagkatapos bago ihagis ang exception, magdagdag ng isang entry na tulad nito sa log:2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. Kung ang distansya na ipinasa sa constructor ay mas mababa sa zero, pagkatapos bago ihagis ang exception, magdagdag ng isang entry na tulad nito sa log:2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
  5. Sa dulo ng constructor, magdagdag ng entry na tulad nito sa log:2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]

Ang mga log ay dapat na nakasulat sa hippodrome.log file , na dapat na matatagpuan sa root ng proyekto sa folder ng logs . Araw-araw dapat palitan ang pangalan ng file ayon sa pattern na hippodrome.2021-12-31.log at sa halip ay dapat na gumawa ng bagong hippodrome.log . Upang gawin ito, gamitin ang RollingFile appender . Sa kasong ito, dapat tanggalin ang mga file na mas matanda sa 7 araw. Upang gawin ito, maaari kang gumamit ng isang konstruksyon tulad ng:

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

Nag-Google kung ano ang papalit sa halip na tatlong tuldok.😊


Pagsusuri ng proyekto . Panoorin pagkatapos makumpleto!