ถ้าฉันจะเดาจุดประสงค์ของคำถามของคุณฉันจะพูดว่า:
- คุณต้องการการตรวจสอบที่สมเหตุสมผลสำหรับผู้ก่อสร้างส่วนตัวที่ทำงานจริงและ
- คุณต้องการให้โคลเวอร์ยกเว้นคอนสตรัคเตอร์ว่างสำหรับคลาส util
สำหรับ 1 เป็นที่ชัดเจนว่าคุณต้องการให้การเริ่มต้นทั้งหมดทำได้ด้วยวิธีการของโรงงาน ในกรณีเช่นนี้การทดสอบของคุณควรสามารถทดสอบผลข้างเคียงของตัวสร้างได้ สิ่งนี้ควรอยู่ในหมวดหมู่ของการทดสอบวิธีส่วนตัวปกติ ทำให้วิธีการมีขนาดเล็กลงเพื่อให้พวกเขาทำสิ่งที่กำหนดได้ในจำนวน จำกัด เท่านั้น (โดยหลักการแล้วคือเพียงสิ่งเดียวและสิ่งหนึ่งที่ดี) จากนั้นทดสอบวิธีการที่ต้องพึ่งพา
ตัวอย่างเช่นถ้าฉันชุด [ส่วนตัว] คอนสตรัคขึ้นชั้นเรียนของฉันทุ่งอินสแตนซ์ที่จะa
5
จากนั้นฉันสามารถ (หรือต้อง) ทดสอบ:
@Test
public void testInit() {
MyClass myObj = MyClass.newInstance(); //Or whatever factory method you put
Assert.assertEquals(5, myObj.getA()); //Or if getA() is private then test some other property/method that relies on a being 5
}
สำหรับ 2 คุณสามารถกำหนดค่าโคลเวอร์เพื่อยกเว้นตัวสร้าง Util หากคุณมีรูปแบบการตั้งชื่อสำหรับคลาส Util เช่นในโปรเจ็กต์ของฉันฉันใช้อะไรแบบนี้ (เพราะเราทำตามแบบแผนที่ชื่อสำหรับคลาส Util ทั้งหมดควรลงท้ายด้วย Util):
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
</clover-setup>
ฉันจงใจทิ้งสิ่ง.*
ต่อไปนี้)
เนื่องจากตัวสร้างดังกล่าวไม่ได้ตั้งใจที่จะทิ้งข้อยกเว้น (ไม่ได้ตั้งใจที่จะทำอะไรเลย)
แน่นอนว่าอาจมีกรณีที่สามที่คุณอาจต้องการมีตัวสร้างว่างสำหรับคลาสที่ไม่ใช่ยูทิลิตี้ ในกรณีเช่นนี้ฉันขอแนะนำให้คุณใส่methodContext
ลายเซ็นที่แน่นอนของตัวสร้าง
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
<methodContext name="myExceptionalClassCtor" regexp="^private MyExceptionalClass()$"/>
</clover-setup>
หากคุณมีคลาสพิเศษมากมายเช่นนี้คุณสามารถเลือกที่จะแก้ไขตัวสร้างส่วนตัวทั่วไป reg-ex ที่ฉันแนะนำและลบออกUtil
จากมัน ในกรณีนี้คุณจะต้องตรวจสอบให้แน่ใจว่าผลข้างเคียงของคอนสตรัคเตอร์ของคุณยังคงได้รับการทดสอบและครอบคลุมโดยวิธีการอื่น ๆ ในคลาส / โครงการของคุณ
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+ *( *) .*"/>
</clover-setup>