มันหมายความว่าอย่างใดอย่างหนึ่ง:
- คุณเขียนรหัสการผลิตที่ตอบสนองคุณสมบัติที่คุณต้องการโดยไม่ต้องเขียนการทดสอบก่อน (การละเมิด "TDD ทางศาสนา") หรือ
- คุณลักษณะที่คุณต้องการเกิดขึ้นเพื่อให้เป็นจริงตามรหัสการผลิตและคุณเพียงแค่เขียนการทดสอบหน่วยอื่นเพื่อครอบคลุมคุณลักษณะนั้น
สถานการณ์หลังนั้นเป็นเรื่องปกติมากกว่าที่คุณคิด ในฐานะที่เป็นตัวอย่างที่กว้างขวางและไม่สำคัญ (แต่ยังคงเป็นตัวอย่าง) สมมติว่าคุณเขียนการทดสอบหน่วยต่อไปนี้ (รหัสเทียมเพราะฉันขี้เกียจ):
public void TestAddMethod()
{
Assert.IsTrue(Add(2,3) == 5);
}
เพราะสิ่งที่คุณต้องการจริงๆคือผลลัพธ์ของการรวม 2 และ 3 เข้าด้วยกัน
วิธีการใช้งานของคุณจะเป็น:
public int add(int x, int y)
{
return x + y;
}
แต่สมมุติว่าตอนนี้ฉันต้องเพิ่ม 4 และ 6 เข้าด้วยกัน:
public void TestAddMethod2()
{
Assert.IsTrue(Add(4,6) == 10);
}
ฉันไม่จำเป็นต้องเขียนวิธีการของฉันเพราะมันครอบคลุมกรณีที่สองอยู่แล้ว
ทีนี้สมมติว่าฉันพบว่าฟังก์ชั่นการเพิ่มของฉันต้องคืนค่าตัวเลขที่มีเพดานบ้างสมมุติว่า 100 ฉันสามารถเขียนวิธีการใหม่ที่ทดสอบสิ่งนี้:
public void TestAddMethod3()
{
Assert.IsTrue(Add(100,100) == 100);
}
และการทดสอบนี้จะล้มเหลว ตอนนี้ฉันต้องเขียนฟังก์ชั่นใหม่
public int add(int x, int y)
{
var a = x + y;
return a > 100 ? 100 : a;
}
เพื่อให้มันผ่านไป
สามัญสำนึกสั่งการว่าถ้า
public void TestAddMethod2()
{
Assert.IsTrue(Add(4,6) == 10);
}
ผ่านคุณไม่จงใจทำให้วิธีการของคุณล้มเหลวเพียงเพื่อให้คุณสามารถมีการทดสอบที่ล้มเหลวเพื่อให้คุณสามารถเขียนรหัสใหม่เพื่อให้ผ่านการทดสอบนั้น