ปัญหาเกิดขึ้นขณะทำ TDD หลังจากผ่านการทดสอบสองสามครั้งประเภทการคืนค่าของบางคลาส / โมดูลจะเปลี่ยนไป ในภาษาการเขียนโปรแกรมแบบสแตติกถ้าวัตถุที่เยาะเย้ยก่อนหน้านี้ถูกนำมาใช้ในการทดสอบของคลาสอื่น ๆและไม่ได้รับการแก้ไขเพื่อให้สะท้อนถึงการเปลี่ยนแปลงประเภทแล้วข้อผิดพลาดในการรวบรวมจะเกิดขึ้น
อย่างไรก็ตามสำหรับภาษาแบบไดนามิกการเปลี่ยนแปลงประเภทการส่งคืนอาจไม่ถูกตรวจพบและการทดสอบของคลาสอื่นจะยังคงผ่าน แน่ใจว่าอาจมีการทดสอบการรวมที่จะล้มเหลวในภายหลัง แต่การทดสอบหน่วยจะผ่านอย่างผิดพลาด มีวิธีใดบ้างที่จะหลีกเลี่ยงปัญหานี้?
การอัปเดตด้วยตัวอย่างเล็ก ๆ น้อย ๆ (ในบางภาษาที่สร้างขึ้น) ...
รุ่น 1:
Calc = {
doMultiply(x, y) {return x * y}
}
//.... more code ....
// On some faraway remote code on a different file
Rect = {
computeArea(l, w) {return Calc.doMultipy(x*y)}
}
// test for Rect
testComputeArea() {
Calc = new Mock()
Calc.expect(doMultiply, 2, 30) // where 2 is the arity
assertEqual(30, computeArea)
}
ตอนนี้ในรุ่น 2:
// I change the return types. I also update the tests for Calc
Calc = {
doMultiply(x, y) {return {result: (x * y), success:true}}
}
... Rect จะทำให้เกิดข้อยกเว้นใน runtime แต่การทดสอบจะยังคงสำเร็จ
class X
แต่การทดสอบclass Y
นั้นขึ้นอยู่กับX
และได้รับการทดสอบกับสัญญาที่แตกต่างจากที่ใช้ในการผลิต