โปรแกรมนี้เลียนแบบฮิปโปโดรม
ในการเริ่มต้นเช่นเดียวกับในโครงการก่อนหน้า ให้สร้างทางแยกจากที่เก็บ: https://github.com/CodeGymCC/hippodromeและโคลนทางแยกนี้ด้วยตัวคุณเอง
งานของคุณคือเพิ่มการทดสอบและการบันทึก
รายการการทดสอบที่จำเป็น
ในรายการต่อไปนี้ ต้องดำเนินการแต่ละรายการเป็นวิธีการทดสอบแยกต่างหาก เมื่อคิดชื่อวิธีการทดสอบ ให้พยายามกระชับ แต่ในขณะเดียวกัน เพื่อให้คุณเข้าใจอย่างคร่าว ๆ ว่ากำลังทดสอบอะไรกันแน่ ตัวอย่างเช่น เปรียบเทียบผลการทดสอบทั้งสองนี้:
![](https://cdn.codegym.cc/images/article/bc2ad851-64bf-43e4-b235-5abb1be944a7/512.jpeg)
ในกรณีที่สองเป็นการยากที่จะเข้าใจว่าการทดสอบประเภทใดไม่ผ่านและคุณจะต้องดูบันทึก
1. คลาสม้า:
- ตัวสร้าง
- ตรวจสอบว่าเมื่อส่งไปยังตัวสร้างเป็นพารามิเตอร์แรก
IllegalArgumentException
จะถูกnull
โยน ในการทำเช่นนี้ ให้ใช้วิธีการassertThrows
; - ตรวจสอบว่าเมื่อส่งผ่านไปยังตัวสร้างเป็นพารามิเตอร์แรก
null
ข้อยกเว้นที่เกิดขึ้นจะมีข้อความ "ชื่อไม่สามารถเป็นค่าว่างได้" ในการทำเช่นนี้ คุณต้องได้รับข้อความจากข้อยกเว้นที่จับได้ และใช้ปุ่มassertEquals
; - ตรวจสอบว่าเมื่อส่งสตริงว่างหรือสตริงที่มีเฉพาะอักขระช่องว่าง (ช่องว่าง แท็บ ฯลฯ) เป็นพารามิเตอร์แรกไปยังตัวสร้าง . จะถูกโยน
IllegalArgumentException
ทิ้ง หากต้องการทดสอบด้วยอักขระช่องว่างที่แตกต่างกัน คุณต้องทำให้การทดสอบเป็นแบบพารามิเตอร์ - ตรวจสอบว่าเมื่อส่งสตริงว่างหรือสตริงที่มีเฉพาะอักขระช่องว่าง (ช่องว่าง แท็บ ฯลฯ) ไปยังตัวสร้างเป็นพารามิเตอร์แรก ข้อยกเว้นที่ส่งจะมีข้อความ "ชื่อไม่สามารถเว้นว่างได้";
- ตรวจสอบว่าเมื่อมีการส่งจำนวนลบไปยังตัวสร้างเป็นพารามิเตอร์ตัวที่สอง
IllegalArgumentException
; - ตรวจสอบว่าเมื่อส่งค่าลบไปยังคอนสตรัคเตอร์เป็นพารามิเตอร์ที่สอง ข้อยกเว้นที่เกิดขึ้นจะมีข้อความ "ความเร็วไม่สามารถเป็นค่าลบได้";
- ตรวจสอบว่าเมื่อมีการส่งจำนวนลบไปยังตัวสร้างเป็นพารามิเตอร์ที่สาม
IllegalArgumentException
; - ตรวจสอบว่าเมื่อส่งค่าลบเป็นพารามิเตอร์ที่สามไปยังตัวสร้าง ข้อยกเว้นที่ส่งจะมีข้อความ "ระยะทางไม่สามารถเป็นค่าลบได้";
- เมธอด getName
- ตรวจสอบว่าเมธอดส่งคืนสตริงที่ส่งผ่านเป็นพารามิเตอร์แรกไปยังคอนสตรัคเตอร์
- วิธี getSpeed
- ตรวจสอบว่าเมธอดส่งคืนตัวเลขที่ส่งผ่านเป็นพารามิเตอร์ที่สองไปยังตัวสร้าง
- วิธี getDistance
- ตรวจสอบว่าเมธอดส่งคืนตัวเลขที่ส่งผ่านเป็นพารามิเตอร์ที่สามไปยังตัวสร้าง
- ตรวจสอบว่าเมธอดคืนค่าศูนย์หากวัตถุถูกสร้างขึ้นโดยใช้ตัวสร้างที่มีสองพารามิเตอร์
- วิธีการย้าย
- ตรวจสอบว่าเมธอดเรียกภายในเมธอด
getRandomDouble
ด้วยพารามิเตอร์ 0.2 และ 0.9 ในการทำเช่นนี้คุณต้องใช้MockedStatic
วิธีการverify
; - ตรวจสอบว่าวิธีการกำหนดค่าระยะทางที่คำนวณโดยสูตร
distance + speed * getRandomDouble(0.2, 0.9)
: ในการทำเช่นนี้คุณต้องล็อคgetRandomDouble
เพื่อให้ส่งคืนค่าบางอย่างที่คุณต้องตั้งค่าโดยการกำหนดพารามิเตอร์การทดสอบ
2. ชั้นฮิปโปโดรม:
- ตัวสร้าง
- ตรวจสอบว่าเมื่อส่งไปยังตัวสร้าง
IllegalArgumentException
, ; จะถูกโยนnull
; - ตรวจสอบว่าเมื่อส่งผ่านไปยังตัวสร้าง
null
ข้อยกเว้นที่เกิดขึ้นจะมีข้อความ "Horses can be null"; - ตรวจสอบว่าเมื่อส่งรายการว่างไปยังตัวสร้าง ; จะถูกโยน
IllegalArgumentException
; - ตรวจสอบว่าเมื่อส่งรายการว่างไปยังตัวสร้าง ข้อยกเว้นที่ส่งจะมีข้อความ "ม้าไม่สามารถว่างเปล่า";
- วิธี getHorses
- ตรวจสอบว่าเมธอดส่งคืนรายการที่มีวัตถุเดียวกันและอยู่ในลำดับเดียวกันกับรายการที่ส่งไปยังตัวสร้าง เมื่อสร้าง วัตถุ ฮิปโปโดรมให้ส่งรายชื่อม้าที่แตกต่างกัน 30 ตัวไปยังตัวสร้าง
- วิธีการย้าย
- ตรวจสอบว่าเมธอดนี้เรียกเมธอดการย้ายม้าทุกตัว เมื่อสร้างวัตถุฮิปโปโดรม ให้ส่งรายการม้าจำลอง 50 ตัวไปยังตัวสร้างและใช้ไฟล์
verify
. - วิธี getWinner
- ตรวจสอบว่าเมธอดส่งกลับม้าด้วยค่าระยะทางที่มากที่สุด
3. ชั้นหลัก
- วิธีการหลัก
- ตรวจสอบว่าวิธีการดำเนินการไม่เกิน 22 วินาที ในการทำเช่นนี้ ให้ใช้คำอธิบายประกอบการหมดเวลา หลังจากเขียนการทดสอบนี้แล้ว ให้ปิดการใช้งาน (ใช้คำอธิบายประกอบที่ปิดใช้งาน) ดังนั้นจึงไม่ต้องใช้เวลาดำเนินการทดสอบทั้งหมด และถ้าจำเป็น ก็สามารถดำเนินการด้วยตนเองได้
สิ่งที่ต้องเข้าสู่ระบบ
1. คลาสหลัก:
- หลังจากสร้างวัตถุฮิปโปโดรมแล้ว ให้เพิ่มรายการเช่นนี้ในบันทึก:
2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
- หลังจากแสดงข้อมูลเกี่ยวกับผู้ชนะแล้ว ให้เพิ่มรายการในลักษณะนี้ในบันทึก:
2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry
ชั้นฮิปโปโดรม:
- ถ้าค่า Null ถูกส่งผ่านไปยังคอนสตรัคเตอร์ ก่อนส่งข้อยกเว้น ให้เพิ่มรายการเช่นนี้ในบันทึก:
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
- ข. ถ้ารายการว่างถูกส่งผ่านไปยังตัวสร้าง ดังนั้นก่อนที่จะโยนข้อยกเว้น ให้เพิ่มรายการเช่นนี้ในบันทึก:
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
- ที่ส่วนท้ายของคอนสตรัคเตอร์ ให้เพิ่มรายการในลักษณะนี้ในบันทึก:
2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses
3. คลาสม้า:
- ถ้าค่า null ถูกส่งผ่านไปยังตัวสร้างแทนที่จะเป็นชื่อ ดังนั้นก่อนที่จะส่งข้อยกเว้น ให้เพิ่มรายการในบันทึกเช่น:
2022-05-31 17:34:59,483 ERROR Horse: Name is null
- หากชื่อที่ส่งไปยังตัวสร้างว่างเปล่า ก่อนส่งข้อยกเว้น ให้เพิ่มรายการในลักษณะนี้ลงในบันทึก:
2022-05-31 17:36:44,196 ERROR Horse: Name is blank
- หากความเร็วที่ส่งไปยังคอนสตรัคเตอร์น้อยกว่าศูนย์ ให้เพิ่มรายการต่อไปนี้ลงในบันทึกก่อนโยนข้อยกเว้น:
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
- หากระยะทางที่ส่งไปยังคอนสตรัคเตอร์น้อยกว่าศูนย์ ให้เพิ่มรายการต่อไปนี้ลงในบันทึกก่อนโยนข้อยกเว้น:
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
- ที่ส่วนท้ายของคอนสตรัคเตอร์ ให้เพิ่มรายการในลักษณะนี้ในบันทึก:
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 ว่าจะแทนที่อะไรแทนจุดสามจุด😊
การวิเคราะห์โครงการ ดูจบแล้ว!