ในช่วงสองสามสัปดาห์ที่ผ่านมาฉันได้ครุ่นคิดและค้นคว้าวิธีเติมช่องว่างในวิธีการทดสอบของเรา ในการทดสอบหน่วยคำศัพท์ที่ง่ายมีขนาดเล็กเกินไปและการทดสอบการรวมแบบดั้งเดิมนั้นใหญ่เกินไป
สถานการณ์ที่เกิดขึ้นบ่อยครั้งที่A
และองค์ประกอบการใช้งานทั้งB
C
อย่างไรก็ตามA
และมีความต้องการที่แตกต่างกันเล็กน้อยและทำให้สมมติฐานแตกต่างกันเล็กน้อยเกี่ยวกับB
C
หากฉันเป็นผู้พัฒนาA
ฉันจะทดสอบสมมติฐานของฉันได้C
อย่างไรและที่ไหน?
เห็นได้ชัดว่าการทดสอบหน่วยที่A
มีข้อสมมติฐานล้อเลียนเกี่ยวกับC
การทดสอบA
แยกได้ แต่ก็ไม่ได้ทดสอบสมมติฐานเอง
C
เป็นไปได้ก็คือการเพิ่มการทดสอบหน่วยสำหรับ อย่างไรก็ตามสิ่งนี้ไม่เหมาะเพราะในขณะที่A
อยู่ระหว่างการพัฒนาการเปลี่ยนแปลงการทดสอบC
ด้วยข้อสมมติฐานที่พัฒนาขึ้นจากA
นั้นจะมีความเงอะงะมากเกินไป อันที่จริงA
s นักพัฒนาอาจไม่ได้มีการเข้าถึงเพียงพอที่จะทดสอบหน่วยของC
(เช่นห้องสมุดภายนอก)
ในการจัดวางสิ่งนี้ด้วยตัวอย่างที่ชัดเจนยิ่งขึ้น: สมมติว่านี่เป็นแอปพลิเคชั่นของโหนด A
และB
ขึ้นอยู่กับC
การอ่านไฟล์ (ในหมู่สิ่งอื่น ๆ ) C
และการจัดเก็บเนื้อหาของแฟ้มในวัตถุส่งผ่านไปยัง ในตอนแรกไฟล์ทั้งหมดที่C
จัดการมีขนาดเล็กและสามารถอ่านแบบซิงโครนัสโดยไม่มีการบล็อกที่สำคัญ อย่างไรก็ตามผู้พัฒนาB
ตระหนักว่าไฟล์ของเขามีขนาดใหญ่ขึ้นและจำเป็นต้องเปลี่ยนC
มาอ่านแบบ async ซึ่งส่งผลให้เกิดข้อผิดพลาดในการซิงโครไนซ์เป็นระยะA
ซึ่งยังคงC
มีการอ่านไฟล์
นี่เป็นประเภทของบั๊กที่ยากต่อการติดตามจากการทดสอบการรวมระบบแบบสมบูรณ์และอาจไม่สามารถทำการทดสอบการรวมระบบได้เลย มันไม่ได้ถูกจับโดยA
การทดสอบหน่วย s เพราะA
ข้อสันนิษฐานนั้นถูกเยาะเย้ย แต่มันได้อย่างง่ายดายจับโดย "มินิ" บูรณาการทดสอบว่าการออกกำลังกายเพียงและA
C
ฉันพบการอ้างอิงประเภทนี้ของการทดสอบเพียงเล็กน้อยเท่านั้น บูรณาการในขนาดเล็ก , การทดสอบส่วนประกอบของการรวม , หน่วยบูรณาการการทดสอบ นอกจากนี้ยังเกี่ยวข้องกับทิศทางการทดสอบ BDDค่อนข้างมากกว่าการทดสอบ TDD อย่างเป็นทางการ
ฉันจะเติมช่องว่างการทดสอบนี้ได้อย่างไร โดยเฉพาะ - ฉันจะทำการทดสอบแบบไหน? ฉันจะจำลองอินพุตA
และC
สำหรับการทดสอบการรวม "มินิ" ได้อย่างไร และควรแยกความกังวลเรื่องการทดสอบระหว่างการทดสอบและการทดสอบหน่วยเท่าไหร่ หรือมีวิธีที่ดีกว่าในการเติมเต็มช่องว่างในการทดสอบ?