วันนี้ฉันเห็นกรณีการทดสอบ JUnit ที่มีการยืนยัน java แทนการยืนยัน JUnit - มีข้อดีหรือข้อเสียที่สำคัญที่จะชอบมากกว่าอีกแบบหนึ่งหรือไม่?
วันนี้ฉันเห็นกรณีการทดสอบ JUnit ที่มีการยืนยัน java แทนการยืนยัน JUnit - มีข้อดีหรือข้อเสียที่สำคัญที่จะชอบมากกว่าอีกแบบหนึ่งหรือไม่?
คำตอบ:
ใน JUnit4 ข้อยกเว้น (ข้อผิดพลาดจริง) ที่ส่งโดยการยืนยัน JUnit จะเหมือนกับข้อผิดพลาดที่เกิดจากassert
คีย์เวิร์ดjava (AssertionError) ดังนั้นจึงเหมือนกับassertTrue
และอื่น ๆ นอกเหนือจากการติดตามสแต็กที่คุณไม่สามารถบอกความแตกต่างได้
ตามที่กล่าวไว้การยืนยันต้องรันด้วยแฟล็กพิเศษใน JVM ทำให้การทดสอบหลายครั้งดูเหมือนจะผ่านเพียงเพราะมีคนลืมกำหนดค่าระบบด้วยแฟล็กนั้นเมื่อการทดสอบ JUnit ทำงาน - ไม่ดี
โดยทั่วไปด้วยเหตุนี้ฉันจึงขอยืนยันว่าการใช้ JUnit assertTrue
เป็นแนวทางปฏิบัติที่ดีกว่าเนื่องจากรับประกันว่าการทดสอบจะดำเนินการทำให้มั่นใจได้ว่ามีความสม่ำเสมอ (บางครั้งคุณใช้assertThat
หรือยืนยันอื่น ๆ ที่ไม่ใช่คีย์เวิร์ด java) และหากพฤติกรรมของ JUnit ยืนยัน ควรมีการเปลี่ยนแปลงในอนาคต (เช่นการต่อเข้ากับตัวกรองบางประเภทหรือคุณสมบัติ JUnit อื่น ๆ ในอนาคต) โค้ดของคุณจะสามารถใช้ประโยชน์จากสิ่งนั้นได้
วัตถุประสงค์ที่แท้จริงของคีย์เวิร์ดที่ยืนยันใน java คือสามารถปิดได้โดยไม่ต้องรับโทษรันไทม์ วิธีนี้ใช้ไม่ได้กับการทดสอบหน่วย
ฉันชอบการยืนยัน JUnit เนื่องจากมี API ที่สมบูรณ์กว่าassert
คำสั่งในตัวและที่สำคัญไม่จำเป็นต้องเปิดใช้งานอย่างชัดเจนซึ่งแตกต่างจากassert
ที่ต้องใช้-ea
อาร์กิวเมนต์ JVM
-ea
ถูกเปิดใช้งานเสมอในการจำเป็นที่จะต้องไม่มีmvn test
-ea
api ที่ดีกว่าจับได้ดี บางครั้งฉันคิดว่า API ถูกใช้ในการทดสอบในทางที่ผิดเนื่องจากไม่ได้เป็นส่วนหนึ่งของแอปพลิเคชัน (a ใน api) ฉันชอบเรียกมันว่าวิธีที่สมบูรณ์กว่า
เมื่อการทดสอบล้มเหลวคุณจะได้รับข้อมูลเพิ่มเติม
assertEquals(1, 2);
ผลลัพธ์ใน java.lang.AssertionError: expected:<1> but was:<2>
เทียบกับ
assert(1 == 2);
ผลลัพธ์ใน java.lang.AssertionError
คุณสามารถรับข้อมูลเพิ่มเติมได้หากคุณเพิ่มอาร์กิวเมนต์ข้อความลงใน assertEquals
assert 1==2: "1 is not 2";
.
assert
อาจเป็นที่ต้องการของ Java - สำหรับการตรวจสอบความถูกต้องซึ่งจะส่งผลต่อประสิทธิภาพการทำงานและจะปิดใช้งานได้ดีที่สุดตามค่าเริ่มต้น อย่างไรก็ตามประสบการณ์ของฉันคือการยืนยันส่วนใหญ่ควรอยู่เสมอ
ฉันจะบอกว่าใช้ JUnit asserts ในกรณีทดสอบและใช้การยืนยันของ java ในโค้ด กล่าวอีกนัยหนึ่งรหัสจริงจะไม่ต้องมีการอ้างอิง JUnit อย่างที่เห็นได้ชัดและหากเป็นการทดสอบก็ควรใช้รูปแบบ JUnit ของรหัสนั้นห้ามใช้การยืนยัน
ฉันจะบอกว่าถ้าคุณใช้ JUnit คุณควรใช้การยืนยัน JUnit assertTrue()
โดยพื้นฐานแล้วจะเหมือนกับassert
มิฉะนั้นทำไมถึงใช้ JUnit?
Assert
ต้องใช้สำเร็จรูปเพิ่มเติม assert
หากไม่มี JUnit คุณจะต้องเขียนกรอบทั้งหมด
สิ่งนี้อาจใช้ไม่ได้หากคุณใช้เฉพาะสิ่งที่มันเงาและใหม่ แต่การยืนยันไม่ได้ถูกนำมาใช้ใน Java จนถึง 1.4SE ดังนั้นหากคุณต้องทำงานในสภาพแวดล้อมที่มีเทคโนโลยีรุ่นเก่าคุณอาจพึ่งพา JUnit ด้วยเหตุผลด้านความเข้ากันได้