การทดสอบกล่องสีขาวต้องการให้ครอบคลุมรหัสแต่ละบรรทัดอย่างน้อยหนึ่งครั้ง
@ApimodelProperty ("หมวดหมู่ศิษย์")@ManyToOne // ตั้งค่าฟิลด์หมวดหมู่หัวเรื่องให้ว่าง @JoinColumn (nullable = false) @JsonView ({noneJsonView.class, การวัดการจัดหมวดหมู่จากตัวอย่างก่อนหน้าของการตั้งค่าที่ไม่ว่างเปล่าเป็นกรณีเราต้องทดสอบสองสถานการณ์: ข้อยกเว้นเมื่อพวกเขาว่างเปล่าและบันทึกไว้ตามปกติเมื่อพวกเขาไม่ว่างเปล่า
@TestPublic Void Savetest () {logger.debug ("หน่วยใหม่ของหมวดหมู่การวัด"); MeasurementUnitCategory MeasurementUnitCategory = การวัดใหม่หมวดหมู่ (); logger.debug ("ทดสอบบันทึก"); MeasurementUnitCategoryService.save (MeasurementUnitCategory);} ที่นี่เราเรียกว่าวิธี save แต่ IDE ไม่ได้แจ้งให้เราจับข้อยกเว้น แต่ไม่ได้หมายความว่าวิธี save จะไม่โยนข้อยกเว้น มันสามารถโยน RuntimeException ที่ไม่ได้ตรวจสอบหรือข้อยกเว้นที่ได้รับ
ในการทดสอบข้อยกเว้นนี้เราจะเรียกใช้รหัสบรรทัดนี้ก่อนเพื่อดูว่าข้อยกเว้นปรากฏขึ้น
org.springframework.dao.dataintegrityViolationException: ไม่สามารถเรียกใช้คำสั่ง; SQL [N/A]; ข้อ จำกัด [null]; ข้อยกเว้นที่ซ้อนกันคือ org.hibernate.exception.constraintviolationexception: ไม่สามารถดำเนินการคำสั่ง
เกิดจาก: org.hibernate.exception.constraintviolationException: ไม่สามารถดำเนินการคำสั่ง
เกิดจาก: org.h2.jdbc.jdbcsqlexception: null ไม่ได้รับอนุญาตสำหรับคอลัมน์ "discipline_id"; คำสั่ง SQL:
แทรกลงในการวัด _unit_category (id, discipline_id, is_asc) ค่า (null,?,?) [23502-194]
เราเห็นข้อยกเว้นสามข้อก่อนคือ JdbcSQLException เมื่อแทรกบันทึกนี้จากนั้นข้อยกเว้นจะทำให้ ConstraintViolationException และข้อยกเว้นใหม่ทำให้เกิด DataIntegrityViolationException
สิ่งนี้ Caused by การห่อหุ้มข้อยกเว้น ตัวอย่างเช่นเลเยอร์พื้นฐานอาจโยนข้อยกเว้น แต่โดยทั่วไปเราจัดการข้อยกเว้นในระดับที่ค่อนข้างสูง
ทำสิ่งนี้เป็นตัวอย่าง DataIntegrityViolationException ข้อมูลละเมิดข้อยกเว้นและอาจมีข้อยกเว้นหลายประเภทดังนั้นวิธีการประมวลผลของข้อยกเว้นนี้จะเหมือนกันหรือคล้ายกัน
เมื่อเลเยอร์พื้นฐานโยน JdbcSQLException จากนั้นเรียกใช้วิธีการของมันเพื่อ catch ข้อยกเว้นและสร้างข้อ จำกัด ใหม่ข้อ จำกัด ConstraintViolationException ด้วยข้อยกเว้น (ข้อยกเว้นการละเมิดข้อ จำกัด ) จากนั้นโยนมันไปที่ชั้นบนแล้วจับมันไปที่ชั้นบน DataIntegrityViolationException ข้อยกเว้นใหม่ เราไม่ได้จัดการกับมันแล้วคอนโซลจะรายงานข้อผิดพลาด
ข้อได้เปรียบของการเก็บห่อหุ้มและการขว้างขึ้นไปคือฉันสามารถใช้ข้อยกเว้นเพื่อจัดการกับสถานการณ์ที่คล้ายกันและเมื่อจัดการกับข้อยกเว้นนี้ฉันสามารถติดตามแหล่งที่มาและรักษาความแม่นยำให้กับสิ่งที่เกิดขึ้น หากแพ็คเกจนี้ไม่พร้อมใช้งานเราจำเป็นต้องไปที่ catch ยกเว้นพื้นฐานที่จับได้โดยตรงเพื่อค้นหาข้อผิดพลาดอย่างถูกต้อง
ตกลงข้อยกเว้นที่เราต้องจับที่นี่คือข้อยกเว้นของ DataIntegrityViolationException
@TestPublic Void Savetest () {logger.debug ("การเตรียมข้อมูลการทดสอบพื้นฐาน"); MeasurementUnitCategory MeasurementUnitCategory = การวัดใหม่หมวดหมู่ (); บูลีน catchException = false; logger.debug ("ทดสอบบันทึกคาดว่าจะโยนข้อยกเว้น"); ลอง {MeasurementUnitCategoryService.save (MeasurementUnitCategory); } catch (dataintegrityViolationException e) {catchException = true; } logger.debug ("ยืนยันว่าข้อยกเว้นการจับภาพนั้นเป็นจริง"); assertThat (catchException). istrue ();}เรียกใช้การทดสอบและผ่าน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น