เมื่อทำการทดสอบ TDD และเขียนการทดสอบหน่วยหนึ่งจะต่อต้านการกระตุ้นให้ "โกง" เมื่อเขียนรหัสซ้ำ "ครั้งแรกของ" การใช้งาน "ที่คุณกำลังทดสอบอยู่ได้อย่างไร
ตัวอย่างเช่น:
ฉันจะต้องคำนวณแฟคทอเรียลของตัวเลข ฉันเริ่มต้นด้วยการทดสอบหน่วย (ใช้ MSTest) สิ่งที่ชอบ:
[TestClass]
public class CalculateFactorialTests
{
[TestMethod]
public void CalculateFactorial_5_input_returns_120()
{
// Arrange
var myMath = new MyMath();
// Act
long output = myMath.CalculateFactorial(5);
// Assert
Assert.AreEqual(120, output);
}
}
ฉันเรียกใช้รหัสนี้และมันล้มเหลวเนื่องจากCalculateFactorial
วิธีการไม่ได้อยู่ ดังนั้นตอนนี้ฉันเขียนการวนซ้ำครั้งแรกของรหัสเพื่อใช้วิธีการภายใต้การทดสอบการเขียนรหัสขั้นต่ำที่ จำเป็นในการผ่านการทดสอบ
สิ่งคือฉันอยากจะเขียนต่อไปนี้:
public class MyMath
{
public long CalculateFactorial(long input)
{
return 120;
}
}
นี่คือเทคนิคที่ถูกต้องในการที่จะจริงๆเป็นรหัสขั้นต่ำที่จำเป็นในการให้ที่ทดสอบที่เฉพาะเจาะจงผ่าน (ไปสีเขียว) แต่ก็เห็นได้ชัดว่า "โกง" เพราะจริงๆมันไม่ได้พยายามที่จะปฏิบัติหน้าที่ในการคำนวณปัจจัย แน่นอนตอนนี้ส่วน refactoring กลายเป็นแบบฝึกหัดใน "การเขียนฟังก์ชั่นที่ถูกต้อง" แทนที่จะเป็น refactoring ที่แท้จริงของการใช้งาน เห็นได้ชัดว่าการเพิ่มการทดสอบเพิ่มเติมด้วยพารามิเตอร์ที่แตกต่างกันจะล้มเหลวและบังคับให้ทำการเปลี่ยนใหม่ แต่คุณต้องเริ่มต้นด้วยการทดสอบหนึ่งครั้ง
ดังนั้นคำถามของฉันคือคุณจะได้รับความสมดุลระหว่าง "การเขียนโค้ดขั้นต่ำเพื่อผ่านการทดสอบ" อย่างไรในขณะที่ยังคงใช้งานได้และในจิตวิญญาณของสิ่งที่คุณพยายามจะทำจริง