เหตุใดเราจึงเขียนวัตถุจำลองเมื่อเขียนกรณีทดสอบหน่วย


11

ขณะนี้เรากำลังเขียนกรณีทดสอบหน่วยในโครงการของเรา การใช้งานสำหรับวิธีการฐานข้อมูลที่มีอยู่และทำงานได้ดี ในกรณีนี้ทำไมเราต้องเขียนวัตถุจำลอง มีเหตุผลพิเศษหรือไม่? เหตุใดฉันจึงไม่สามารถทดสอบ DAO ได้ดำเนินการโดยตรง

คำตอบ:


6

คุณไม่ควรเยาะเย้ยการโทรไปยังฐานข้อมูลเพราะนั่นจะทำให้การดำเนินการไม่สำเร็จ สิ่งที่คุณควรจะล้อเลียนยกตัวอย่างเช่นการโทรไปยัง DAO ของคุณจากนั้นคือเลเยอร์บริการ การเยาะเย้ยช่วยให้คุณสามารถทดสอบวิธีการแยก

สมมติว่าคุณมีร้านอาหารจำลองพร้อมสถาปัตยกรรมเช่นนี้:

Cook <=> Server <=> Customer

คุณต้องการทดสอบแต่ละเลเยอร์อย่างอิสระ นี่Serverคือชั้นบริการของคุณและCookสามารถคิดได้ว่าเป็น DAO Serverคือสิ่งที่คุณต้องการที่จะเยาะเย้ยในขณะที่การทดสอบCustomerและเป็นสิ่งที่คุณต้องการที่จะเยาะเย้ยในขณะที่การทดสอบCook Serverอย่างไรก็ตามCookการทดสอบหน่วยควรตรวจสอบว่าการใช้งานกำลังส่งคืนแฮมเบอร์เกอร์เมื่อมีคำสั่งแฮมเบอร์เกอร์และไม่ใช่ยางยาง


3
ฉันไม่เห็นด้วยกับคำสั่งคุณไม่ควรเยาะเย้ยโทรไปยังฐานข้อมูลเพราะจะเอาชนะวัตถุประสงค์ เพราะมันดูธรรมดาเกินไป ตามที่คนอื่นพูดด้านล่างคุณจะต้องทดสอบทุกอย่างแยกหน่วย หากสิ่งที่คุณกำลังทดสอบหน่วยคือการเข้าถึงฐานข้อมูลแน่นอนความคิดเห็นของคุณถูกต้อง หากสิ่งที่คุณทดสอบหน่วยไม่ใช่การเข้าถึงฐานข้อมูลประโยคแรกของคุณไม่ถูกต้อง ฉันเห็นด้วยกับทุกสิ่งที่คุณพูด 0 :-)
Peter K.

6

การทดสอบ businesslogic เข้ากับฐานข้อมูลเป็นเรื่องที่ดี แต่การทดสอบเหล่านี้เรียกว่าการทดสอบการรวมแม้ว่าคุณจะใช้ nunit หรือ junit หรือ phpunit เพื่อดำเนินการเหล่านี้

Unittestsคือการทดสอบ spezialized ที่การทดสอบแยก (เช่น buisinesslogic ที่ไม่มีฐานข้อมูล) เป็นสิ่งสำคัญ Mocks / fakes / stups ถูกใช้เพื่อบังคับใช้การแยกนี้


2

เพียงแค่: ทดสอบ DAO จริงไม่ใช่เนื้อหาฐานข้อมูล

สมมติว่าคลาส DAO Person ของคุณมีเมธอด getByName () คุณเขียนทดสอบและโทร Person.getByName ("John Smith") สมมติว่าการทดสอบล้มเหลวเพราะมีคนลบบันทึกของจอห์นออกจากฐานข้อมูล ตอนนี้ซอฟต์แวร์ CI ทุกตัวและหัวหน้างาน / ผู้ตรวจสอบของคุณสามารถอ้างได้ว่าซอฟต์แวร์ของคุณมีข้อบกพร่อง แต่ในความเป็นจริงมันไม่ใช่ หากคุณจำลองฐานข้อมูลคุณสามารถพิสูจน์ได้ว่า DAO ของคุณทำงานได้หากได้รับแถวที่ถูกต้องจากตารางที่ถูกต้อง

หากคุณต้องการทดสอบฐานข้อมูลเองเช่น: หากการเรียกใช้งานเมธอด DAO ที่แน่นอนทำให้ข้อมูลอยู่ในสถานะที่แน่นอนก็เป็นไปได้เช่นกัน มีอะไรเพิ่มเติมที่เป็นประโยชน์จริง ๆ กับตัวแบบข้อมูลที่แปลกประหลาด (EAV, ชุดต้นไม้ซ้อน) ที่คุณไม่สามารถคาดหวังได้ว่าฐานข้อมูลจะมีความสมบูรณ์แบบกันกระสุน ดูที่DBUnitเพื่อทำให้ชีวิตของคุณง่ายขึ้น


1

อีกเหตุผลหนึ่งคือเพื่อหลีกเลี่ยงเวลาดำเนินการของการรันคำสั่งฐานข้อมูลจริง อาจดูเหมือนไม่มากนัก แต่ค่าใช้จ่ายในการตั้งค่าและการเชื่อมต่อที่ขาดลงในที่สุดจะเพิ่มขึ้นและมีแนวโน้มมากที่สุดที่จะเพิ่มเวลาโดยรวมในการรันชุดทดสอบเมื่อเทียบกับการใช้วัตถุจำลอง


0

เพื่อแยกชั้นที่คุณกำลังทดสอบ หรืออื่น ๆ หากการทดสอบล้มเหลวคุณจะรู้ได้อย่างไรว่าปัญหาอยู่ในชั้นเรียนที่คุณกำลังทำการทดสอบหรือหนึ่งในนั้นคือการอ้างอิง


คุณโทรและทดสอบวิธีโดยตรงในการฝัง DAO หรือไม่
Vinoth Kumar CM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.