อะไรคือข้อดีของการทดสอบหน่วยและการทดสอบการรวมระบบ?
นั่นคือการแบ่งขั้วที่ผิดพลาด
การทดสอบหน่วยและการทดสอบการรวมให้บริการสองอย่างที่คล้ายกัน วัตถุประสงค์ของการทดสอบหน่วยคือเพื่อให้แน่ใจว่าวิธีการทำงานของคุณ ในแง่การปฏิบัติการทดสอบหน่วยตรวจสอบให้แน่ใจว่ารหัสปฏิบัติตามสัญญาที่ระบุไว้โดยการทดสอบหน่วย นี้เห็นได้ชัดในทางที่การทดสอบหน่วยได้รับการออกแบบที่พวกเขาโดยเฉพาะรัฐสิ่งรหัสควรจะทำและยืนยันว่ารหัสไม่ว่า
การทดสอบการรวมจะแตกต่างกัน การทดสอบแบบบูรณาการใช้การโต้ตอบระหว่างส่วนประกอบของซอฟต์แวร์ คุณสามารถมีส่วนประกอบของซอฟต์แวร์ที่ผ่านการทดสอบทั้งหมดและยังคงล้มเหลวในการทดสอบการรวมเนื่องจากพวกเขาไม่ทำงานอย่างถูกต้อง
อย่างไรก็ตามหากมีข้อได้เปรียบที่แน่นอนในการทดสอบหน่วยนี่คือ: การทดสอบหน่วยนั้นง่ายต่อการติดตั้งและต้องใช้เวลาและความพยายามน้อยกว่าการทดสอบแบบรวม เมื่อใช้อย่างถูกต้องการทดสอบหน่วยจะส่งเสริมการพัฒนารหัส "ทดสอบได้" ซึ่งหมายความว่าผลลัพธ์สุดท้ายน่าเชื่อถือมากขึ้นเข้าใจได้ง่ายขึ้นและง่ายต่อการดูแลรักษา โค้ดที่ทดสอบได้มีคุณสมบัติบางอย่างเช่น API ที่สอดคล้องกันพฤติกรรมที่ทำซ้ำได้และส่งคืนผลลัพธ์ที่ยืนยันได้ง่าย
การทดสอบบูรณาการนั้นยากและมีราคาแพงกว่าเพราะคุณมักจะต้องมีการเยาะเย้ยอย่างละเอียดการตั้งค่าที่ซับซ้อนและการยืนยันที่ยากลำบาก ในระดับสูงสุดของการรวมระบบลองจินตนาการถึงการพยายามจำลองการโต้ตอบของมนุษย์ใน UI ระบบซอฟต์แวร์ทั้งหมดนั้นใช้สำหรับระบบอัตโนมัติแบบนั้น และมันเป็นระบบอัตโนมัติที่เรากำลังตามหา การทดสอบโดยมนุษย์นั้นไม่สามารถทำซ้ำได้และไม่ปรับขนาดเหมือนกับการทดสอบอัตโนมัติ
ในที่สุดการทดสอบการรวมกันไม่รับประกันเกี่ยวกับการครอบคลุมโค้ด มีการทดสอบลูปรหัสเงื่อนไขและสาขากี่ชุดด้วยการทดสอบการรวมระบบของคุณ คุณรู้จริงเหรอ มีเครื่องมือที่คุณสามารถใช้กับการทดสอบหน่วยและวิธีการทดสอบที่จะบอกคุณว่าครอบคลุมรหัสมากน้อยเพียงใดและความซับซ้อนของรหัสของคุณคืออะไร แต่พวกเขาทำงานได้ดีเพียงระดับเมธอดซึ่งการทดสอบหน่วยอาศัยอยู่
หากการทดสอบของคุณเปลี่ยนไปทุกครั้งที่คุณปรับโครงสร้างใหม่นั่นเป็นปัญหาที่แตกต่าง การทดสอบหน่วยควรจะเกี่ยวกับการบันทึกสิ่งที่ซอฟต์แวร์ของคุณทำพิสูจน์ว่าทำแล้วและพิสูจน์ว่ามันทำเช่นนั้นอีกครั้งเมื่อคุณปรับโครงสร้างการใช้งานพื้นฐาน หาก API ของคุณเปลี่ยนแปลงหรือคุณต้องการวิธีการของคุณในการเปลี่ยนแปลงตามการเปลี่ยนแปลงในการออกแบบระบบนั่นคือสิ่งที่ควรจะเกิดขึ้น ถ้ามันเกิดขึ้นมากมายให้ลองเขียนข้อสอบของคุณก่อนที่จะเขียนโค้ด สิ่งนี้จะบังคับให้คุณคิดถึงสถาปัตยกรรมโดยรวมและอนุญาตให้คุณเขียนโค้ดด้วย API ที่สร้างไว้แล้ว
หากคุณใช้เวลาส่วนใหญ่ในการเขียนบททดสอบสำหรับรหัสเรื่องเล็ก ๆ น้อย ๆ
public string SomeProperty { get; set; }
จากนั้นคุณควรทบทวนวิธีการของคุณอีกครั้ง การทดสอบหน่วยควรทดสอบพฤติกรรมและไม่มีพฤติกรรมในบรรทัดของรหัสด้านบน อย่างไรก็ตามคุณได้สร้างการอ้างอิงในโค้ดของคุณอยู่ที่ไหนสักแห่งเนื่องจากคุณสมบัตินั้นเกือบจะถูกอ้างถึงในที่อื่นในรหัสของคุณ แทนที่จะทำเช่นนั้นให้พิจารณาวิธีการเขียนที่ยอมรับคุณสมบัติที่ต้องการเป็นพารามิเตอร์:
public string SomeMethod(string someProperty);
ตอนนี้วิธีการของคุณไม่มีการพึ่งพาสิ่งที่อยู่นอกตัวเองและตอนนี้มันสามารถทดสอบได้มากขึ้นเพราะมันมีอยู่ในตัวเองอย่างสมบูรณ์ จริงอยู่ที่คุณจะไม่สามารถทำสิ่งนี้ได้ แต่มันจะย้ายโค้ดของคุณไปในทิศทางที่สามารถทดสอบได้มากขึ้นและในครั้งนี้คุณกำลังเขียนการทดสอบหน่วยสำหรับการทำงานจริง