โปรแกรมนี้เลียนแบบฮิปโปโดรม

ในการเริ่มต้นเช่นเดียวกับในโครงการก่อนหน้า ให้สร้างทางแยกจากที่เก็บ: https://github.com/CodeGymCC/hippodromeและโคลนทางแยกนี้ด้วยตัวคุณเอง

งานของคุณคือเพิ่มการทดสอบและการบันทึก

รายการการทดสอบที่จำเป็น

ในรายการต่อไปนี้ ต้องดำเนินการแต่ละรายการเป็นวิธีการทดสอบแยกต่างหาก เมื่อคิดชื่อวิธีการทดสอบ ให้พยายามกระชับ แต่ในขณะเดียวกัน เพื่อให้คุณเข้าใจอย่างคร่าว ๆ ว่ากำลังทดสอบอะไรกันแน่ ตัวอย่างเช่น เปรียบเทียบผลการทดสอบทั้งสองนี้:

ในกรณีที่สองเป็นการยากที่จะเข้าใจว่าการทดสอบประเภทใดไม่ผ่านและคุณจะต้องดูบันทึก

1. คลาสม้า:

  1. ตัวสร้าง
    • ตรวจสอบว่าเมื่อส่งไปยังตัวสร้างเป็นพารามิเตอร์แรกIllegalArgumentExceptionจะถูกnullโยน ในการทำเช่นนี้ ให้ใช้วิธีการassertThrows;
    • ตรวจสอบว่าเมื่อส่งผ่านไปยังตัวสร้างเป็นพารามิเตอร์แรกnullข้อยกเว้นที่เกิดขึ้นจะมีข้อความ "ชื่อไม่สามารถเป็นค่าว่างได้" ในการทำเช่นนี้ คุณต้องได้รับข้อความจากข้อยกเว้นที่จับได้ และใช้ปุ่มassertEquals;
    • ตรวจสอบว่าเมื่อส่งสตริงว่างหรือสตริงที่มีเฉพาะอักขระช่องว่าง (ช่องว่าง แท็บ ฯลฯ) เป็นพารามิเตอร์แรกไปยังตัวสร้าง . จะถูกโยนIllegalArgumentExceptionทิ้ง หากต้องการทดสอบด้วยอักขระช่องว่างที่แตกต่างกัน คุณต้องทำให้การทดสอบเป็นแบบพารามิเตอร์
    • ตรวจสอบว่าเมื่อส่งสตริงว่างหรือสตริงที่มีเฉพาะอักขระช่องว่าง (ช่องว่าง แท็บ ฯลฯ) ไปยังตัวสร้างเป็นพารามิเตอร์แรก ข้อยกเว้นที่ส่งจะมีข้อความ "ชื่อไม่สามารถเว้นว่างได้";
    • ตรวจสอบว่าเมื่อมีการส่งจำนวนลบไปยังตัวสร้างเป็นพารามิเตอร์ตัวที่สองIllegalArgumentException;
    • ตรวจสอบว่าเมื่อส่งค่าลบไปยังคอนสตรัคเตอร์เป็นพารามิเตอร์ที่สอง ข้อยกเว้นที่เกิดขึ้นจะมีข้อความ "ความเร็วไม่สามารถเป็นค่าลบได้";
    • ตรวจสอบว่าเมื่อมีการส่งจำนวนลบไปยังตัวสร้างเป็นพารามิเตอร์ที่สามIllegalArgumentException;
    • ตรวจสอบว่าเมื่อส่งค่าลบเป็นพารามิเตอร์ที่สามไปยังตัวสร้าง ข้อยกเว้นที่ส่งจะมีข้อความ "ระยะทางไม่สามารถเป็นค่าลบได้";
  2. เมธอด getName
    • ตรวจสอบว่าเมธอดส่งคืนสตริงที่ส่งผ่านเป็นพารามิเตอร์แรกไปยังคอนสตรัคเตอร์
  3. วิธี getSpeed
    • ตรวจสอบว่าเมธอดส่งคืนตัวเลขที่ส่งผ่านเป็นพารามิเตอร์ที่สองไปยังตัวสร้าง
  4. วิธี getDistance
    • ตรวจสอบว่าเมธอดส่งคืนตัวเลขที่ส่งผ่านเป็นพารามิเตอร์ที่สามไปยังตัวสร้าง
    • ตรวจสอบว่าเมธอดคืนค่าศูนย์หากวัตถุถูกสร้างขึ้นโดยใช้ตัวสร้างที่มีสองพารามิเตอร์
  5. วิธีการย้าย
    • ตรวจสอบว่าเมธอดเรียกภายในเมธอดgetRandomDoubleด้วยพารามิเตอร์ 0.2 และ 0.9 ในการทำเช่นนี้คุณต้องใช้MockedStaticวิธีการverify;
    • ตรวจสอบว่าวิธีการกำหนดค่าระยะทางที่คำนวณโดยสูตรdistance + speed * getRandomDouble(0.2, 0.9): ในการทำเช่นนี้คุณต้องล็อคgetRandomDoubleเพื่อให้ส่งคืนค่าบางอย่างที่คุณต้องตั้งค่าโดยการกำหนดพารามิเตอร์การทดสอบ

2. ชั้นฮิปโปโดรม:

  1. ตัวสร้าง
    • ตรวจสอบว่าเมื่อส่งไปยังตัวสร้างIllegalArgumentException, ; จะถูกโยนnull;
    • ตรวจสอบว่าเมื่อส่งผ่านไปยังตัวสร้างnullข้อยกเว้นที่เกิดขึ้นจะมีข้อความ "Horses can be 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. ถ้าค่า Null ถูกส่งผ่านไปยังคอนสตรัคเตอร์ ก่อนส่งข้อยกเว้น ให้เพิ่มรายการเช่นนี้ในบันทึก:2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. ข. ถ้ารายการว่างถูกส่งผ่านไปยังตัวสร้าง ดังนั้นก่อนที่จะโยนข้อยกเว้น ให้เพิ่มรายการเช่นนี้ในบันทึก: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. ถ้าค่า null ถูกส่งผ่านไปยังตัวสร้างแทนที่จะเป็นชื่อ ดังนั้นก่อนที่จะส่งข้อยกเว้น ให้เพิ่มรายการในบันทึกเช่น: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 ใหม่แทน ในการทำเช่นนี้ ให้ใช้โปรแกรม เสริม RollingFile ในกรณีนี้ ควรลบไฟล์ที่เก่ากว่า 7 วัน ในการทำเช่นนี้ คุณสามารถใช้โครงสร้างเช่น:

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

Googled ว่าจะแทนที่อะไรแทนจุดสามจุด😊


การวิเคราะห์โครงการ ดูจบแล้ว!