เริ่มต้นด้วยแนวคิดนี้:
1) เริ่มต้นด้วยพฤติกรรมที่คุณต้องการ เขียนทดสอบ ดูการทดสอบล้มเหลว
2) เขียนโค้ดให้เพียงพอเพื่อให้การทดสอบผ่าน ดูการทดสอบทั้งหมดที่ผ่าน
3) ค้นหารหัสซ้ำซ้อน / เลอะเทอะ -> refactor ดูการทดสอบยังคงผ่าน ไปที่ 1
ดังนั้นใน # 1 สมมติว่าคุณต้องการสร้างคำสั่งใหม่ (ฉันกำลังขยายไปถึงวิธีการใช้งานคำสั่งดังนั้นทนกับฉัน) (นอกจากนี้ฉันจะเป็นบิตในทางปฏิบัติมากกว่า TDD มาก)
คำสั่งใหม่เรียกว่า MakeMyLunch ดังนั้นคุณต้องสร้างการทดสอบก่อนเพื่อสร้างอินสแตนซ์และรับชื่อคำสั่ง:
@Test
public void instantiateMakeMyLunch() {
ICommand command = new MakeMyLunchCommand();
assertEquals("makeMyLunch",command.getCommandName());
}
สิ่งนี้ล้มเหลวบังคับให้คุณสร้างคลาสคำสั่งใหม่และให้มันคืนชื่อ (ผู้พิถีพิถันจะบอกว่านี่เป็นรอบที่สองของ TDD ไม่ใช่ 1) ดังนั้นคุณจึงสร้างคลาสและให้มันใช้งานอินเตอร์เฟส ICommand รวมถึงส่งคืนชื่อคำสั่ง การรันการทดสอบทั้งหมดแสดงให้เห็นถึงรหัสผ่านทั้งหมดดังนั้นคุณจึงต้องมองหาโอกาสในการปรับโครงสร้างใหม่ อาจไม่มีเลย
ดังนั้นถัดไปคุณต้องการที่จะใช้การดำเนินการ ดังนั้นคุณต้องถาม: ฉันจะรู้ได้อย่างไรว่า "MakeMyLunch" สำเร็จ "ทำอาหารกลางวันของฉัน" การเปลี่ยนแปลงใดในระบบเนื่องจากการดำเนินการนี้ ฉันสามารถทดสอบสิ่งนี้ได้ไหม
สมมติว่าทดสอบง่ายสำหรับ:
@Test
public void checkThatMakeMyLunchIsSuccessful() {
ICommand command = new MakeMyLunchCommand();
command.execute();
assertTrue( Lunch.isReady() );
}
ในบางครั้งสิ่งนี้ยากกว่าและสิ่งที่คุณต้องการทำจริงๆคือทดสอบความรับผิดชอบของหัวเรื่องภายใต้การทดสอบ (MakeMyLunchCommand) บางทีความรับผิดชอบของ MakeMyLunchCommand คือการโต้ตอบกับตู้เย็นและไมโครเวฟ ดังนั้นเพื่อทดสอบคุณสามารถใช้ตู้เย็นจำลองและไมโครเวฟจำลอง [ตัวอย่างกรอบจำลองสองตัวอย่างคือMockitoและnMockหรือดูที่นี่ ]
ในกรณีนี้คุณจะทำบางอย่างเช่นรหัสหลอกต่อไปนี้:
@Test
public void checkThatMakeMyLunchIsSuccessful() {
Fridge mockFridge = mock(Fridge);
Microwave mockMicrowave = mock(Microwave);
ICommand command = new MakeMyLunchCommand( mockFridge, mockMicrowave );
command.execute();
mockFramework.assertCalled( mockFridge.removeFood );
mockFramework.assertCalled( microwave.turnon );
}
คนเจ้าระเบียบบอกว่าทดสอบความรับผิดชอบของชั้นเรียนของคุณ - การโต้ตอบกับชั้นเรียนอื่น (คำสั่งเปิดตู้เย็นและเปิดไมโครเวฟหรือไม่)
นักปฏิบัตินิยมกล่าวว่าการทดสอบสำหรับกลุ่มของชั้นเรียนและการทดสอบผล (อาหารกลางวันของคุณพร้อมหรือยัง?)
ค้นหาสมดุลที่เหมาะสมกับระบบของคุณ
(หมายเหตุ: พิจารณาว่าบางทีคุณอาจมาถึงโครงสร้างอินเทอร์เฟซของคุณเร็วเกินไปบางทีคุณอาจปล่อยให้สิ่งนี้วิวัฒนาการเมื่อคุณเขียนการทดสอบและการใช้งานหน่วยและใน # 3 คุณ "สังเกตเห็น" โอกาสของอินเทอร์เฟซทั่วไป)