โค้ดที่ทำให้ครอบคลุมไม่ได้
(blog.npcode.com)แม้แต่โค้ด Kotlin ที่เรียบง่ายแบบนี้ ก็ยากมากจนแทบเป็นไปไม่ได้ที่จะทดสอบทุกสาขาให้ครบ เพราะ Kotlin สร้างสาขาที่ผู้เขียนโค้ดไม่ได้ตั้งใจขึ้นมาระหว่างคอมไพล์โค้ดนี้เป็นไบต์โค้ด
when(answer) {
"yes" -> true
else -> false
}
ในขณะที่ Kotlin มอบความสะดวกมากมายให้กับนักพัฒนาเมื่อเขียนโค้ด แต่เมื่อคอมไพล์เป็นไบต์โค้ดแล้ว ก็จะสร้างคำสั่งสาขาที่ผู้ใช้มองไม่เห็นขึ้นมาเป็นจำนวนมากเช่นนี้ด้วย jacoco ซึ่งเป็นเครื่องมือวัด test coverage ที่ใช้กันแพร่หลายที่สุดบนแพลตฟอร์ม JVM จะคำนวณ branch coverage จากไบต์โค้ด ดังนั้นจึงอาจบังคับให้นักพัฒนาที่ใช้ภาษา Kotlin ต้องครอบคลุมสาขาที่พวกเขาเองก็ไม่ทันสังเกตเห็นด้วย ด้วยเหตุนี้ หากนักพัฒนา Kotlin พยายามทำ test coverage ให้ได้ 100% ก็อาจมีกรณีแบบข้างต้นที่ต้องลอง decompile ดู และถ้าโชคร้ายกว่านั้น อาจ decompile ไม่สำเร็จจนต้องไปดูไบต์โค้ดโดยตรงเพื่อตรวจสอบว่ามีสาขาใดอยู่บ้าง
9 ความคิดเห็น
https://toss.im/slash-21/sessions/1-6
การบิดโค้ดเพื่อพยายามปั่นตัวเลขการติดตาม coverage ให้ได้ 100% นี่ให้ความรู้สึกเหมือนทำผิดจุดประสงค์หลักกับเรื่องรองเลยนะ
โค้ดไม่ได้บิดเบี้ยวหรอก แค่มีวิธีอื่นที่สะดวกกว่าสำหรับมนุษย์เท่านั้นเอง
ในสายงานกลาโหม (ระบบอาวุธ) แนวทางของ DAPA กำหนดให้ต้องมี code coverage 100%
ในความเป็นจริง การทำให้ได้ 100% เป็นเรื่องยาก แต่เท่าที่ทราบ หากมีส่วนที่ครอบคลุมไม่ได้ ก็ต้องใส่คำอธิบายทีละจุดว่าทำไมจึงครอบคลุมไม่ได้
โค้ดที่ไม่มีทางครอบคลุมได้
ความคลั่งของการทดสอบ 100%…
5555
ในกรณีของการแตกแขนงด้วย
enum/sealed/booleanหากจัดการได้ไม่ถูกต้อง คอมไพเลอร์ได้ถูกเปลี่ยนให้แสดงคำเตือนใน Kotlin 1.6 และตั้งแต่ 1.7 เป็นต้นไปจะเป็นข้อผิดพลาดhttps://youtrack.jetbrains.com/issue/KT-47709
อ่านเนื้อหาใน slash 21 อย่างละเอียดแล้วครับ 555
อ๋อ~ เป็นเนื้อหาที่ออกมาจาก slash 21 นี่เอง... ผมเพิ่งเห็นครั้งแรกจากทวิตเตอร์ของคนรู้จักน่ะครับ... ขอโทษที่มาช้า...