ก่อนอื่นขอโทษสำหรับชื่อฉันไม่สามารถคิดถึงวิธีที่ง่ายที่สุดในการอธิบาย!
ฉันมีวิธีที่ฉันต้องการเขียนการทดสอบหน่วยสำหรับ ฉันจะให้มันค่อนข้างทั่วไปเพราะฉันไม่ต้องการพูดคุยเกี่ยวกับการใช้งานของวิธีการเพียงแค่การทดสอบของมัน วิธีการคือ:
public void HandleItem(item a)
{
CreateNewItem();
UpdateStatusOnPreviousItem();
SetNextRunDate();
}
ดังนั้นคลาสนี้มีวิธีพับลิกหนึ่งที่เรียกใช้เมธอดส่วนตัวเพื่อทำตรรกะ
ดังนั้นเมื่อเขียนการทดสอบหน่วยฉันต้องการตรวจสอบทั้งสามสิ่งได้ทำไปแล้ว ในขณะที่พวกเขาทั้งหมดถูกเรียกใช้ในการทำงานเดียวกันฉันคิดว่าฉันสามารถทำได้เป็นแบบทดสอบเดียว:
public void GivenItem_WhenRun_Thenxxxxx
{
HandleItem(item);
// Assert item has been created
// Assert status has been set on the previous item
// Assert run date has been set
}
แต่ฉันคิดว่าฉันสามารถเขียนเป็นแบบทดสอบแยกกันสามแบบ:
public void GivenItem_WhenRun_ThenItemIsCreated()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenStatusIsUpdatedOnPreviousItem()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenRunDateIsSet()
{
HandleItem(item);
}
ดังนั้นสำหรับฉันนี่ดูเหมือนจะดีกว่าเนื่องจากมันเป็นข้อกำหนดในการแสดงรายการ แต่ทั้งสามนั้นเกี่ยวข้องกันและต้องการงานเดียวกันที่ดำเนินการกับวิธีการทดสอบอย่างแน่นอนดังนั้นฉันจึงใช้งานรหัสเดียวกัน 3 ครั้ง
มีวิธีแนะนำให้ทำอย่างไรกับเรื่องนี้?
ขอบคุณ