มันคือ.
แม้ว่าคุณจะทำการทดสอบหน่วยเพียงอย่างเดียว แต่ก็ไม่ใช่เรื่องแปลกที่จะมีรหัสในการทดสอบมากกว่ารหัสที่ทดสอบจริง ไม่มีอะไรผิดปกติกับมัน
พิจารณารหัสง่ายๆ:
public void SayHello(string personName)
{
if (personName == null) throw new NullArgumentException("personName");
Console.WriteLine("Hello, {0}!", personName);
}
การทดสอบจะเป็นอย่างไร? มีอย่างน้อยสี่กรณีทดสอบที่นี่:
null
ชื่อบุคคล เป็นข้อยกเว้นจริง ๆ แล้วโยน นั่นคือโค้ดทดสอบอย่างน้อยสามบรรทัดที่จะเขียน
"Jeff"
ชื่อบุคคล เราได้รับคำ"Hello, Jeff!"
ตอบหรือไม่? นั่นคือรหัสทดสอบสี่บรรทัด
ชื่อบุคคลเป็นสตริงว่าง เราคาดหวังผลลัพธ์ใด ผลผลิตที่แท้จริงคืออะไร? คำถามด้าน: มันตรงกับข้อกำหนดการทำงานหรือไม่ นั่นหมายถึงรหัสอีกสี่บรรทัดสำหรับการทดสอบหน่วย
ชื่อบุคคลนั้นสั้นพอสำหรับสตริง แต่ยาวเกินกว่าที่จะรวมกับ"Hello, "
และเครื่องหมายอัศเจรีย์ จะเกิดอะไรขึ้น¹
ต้องใช้รหัสทดสอบจำนวนมาก ยิ่งไปกว่านั้นชิ้นส่วนพื้นฐานที่สุดของรหัสมักจะต้องการรหัสการติดตั้งซึ่งเริ่มต้นวัตถุที่จำเป็นสำหรับรหัสภายใต้การทดสอบซึ่งมักจะนำไปสู่การเขียนสตับและ mocks ฯลฯ
หากอัตราส่วนมีขนาดใหญ่มากในกรณีนี้คุณอาจตรวจสอบบางสิ่ง:
มีการทำสำเนารหัสในการทดสอบหรือไม่ ความจริงที่ว่าเป็นรหัสทดสอบไม่ได้หมายความว่ารหัสควรซ้ำ (คัดลอกวาง) ระหว่างการทดสอบที่คล้ายกัน: การทำซ้ำดังกล่าวจะทำให้การบำรุงรักษาการทดสอบเหล่านั้นยาก
มีการทดสอบซ้ำซ้อนหรือไม่ ตามกฎของหัวแม่มือหากคุณลบการทดสอบหน่วยความครอบคลุมสาขาควรลดลง หากไม่เป็นเช่นนั้นอาจเป็นการระบุว่าไม่จำเป็นต้องทำการทดสอบเนื่องจากเส้นทางนั้นครอบคลุมโดยการทดสอบอื่นแล้ว
คุณกำลังทดสอบเฉพาะรหัสที่คุณควรทดสอบหรือไม่ คุณไม่ได้คาดหวังให้ทดสอบเฟรมเวิร์กพื้นฐานของไลบรารีของบุคคลที่สาม แต่เฉพาะรหัสของโครงการเท่านั้น
ด้วยการทดสอบควันการทดสอบระบบและการรวมการทดสอบการทำงานและการยอมรับและการทดสอบความเครียดและโหลดคุณเพิ่มรหัสการทดสอบมากขึ้นดังนั้นการมีสี่หรือห้า LOC ของการทดสอบสำหรับ LOC ทุกรหัสจริงไม่ใช่สิ่งที่คุณควรกังวล
หมายเหตุเกี่ยวกับ TDD
หากคุณกังวลเกี่ยวกับเวลาที่ใช้ในการทดสอบรหัสของคุณอาจเป็นเพราะคุณทำผิดนั่นคือรหัสก่อนทำการทดสอบในภายหลัง ในกรณีนี้ TDD อาจช่วยด้วยการกระตุ้นให้คุณทำงานซ้ำเป็นเวลา 15-45 วินาทีสลับไปมาระหว่างรหัสและการทดสอบ ตามผู้เสนอของ TDD จะช่วยเพิ่มความเร็วในกระบวนการพัฒนาโดยลดจำนวนการทดสอบที่คุณต้องทำและที่สำคัญกว่านั้นคือปริมาณของรหัสธุรกิจที่ต้องเขียนและเขียนใหม่โดยเฉพาะสำหรับการทดสอบ
¹ให้nเป็นความยาวสูงสุดของสตริง เราสามารถเรียกSayHello
และผ่านโดยอ้างอิงถึงสตริงที่มีความยาวn - 1 ซึ่งน่าจะใช้ได้ดี ในConsole.WriteLine
ขั้นตอนนี้การจัดรูปแบบควรจบด้วยสตริงที่มีความยาวn + 8 ซึ่งจะส่งผลให้เกิดข้อยกเว้น อาจเป็นไปได้เนื่องจากข้อ จำกัด ของหน่วยความจำแม้แต่สตริงที่มีอักขระn / 2 จะทำให้เกิดข้อยกเว้น คำถามหนึ่งที่ควรถามคือการทดสอบที่สี่นี้เป็นการทดสอบหน่วย (ดูเหมือนว่าการทดสอบหน่วยหนึ่ง แต่อาจมีผลกระทบที่สูงขึ้นมากในแง่ของทรัพยากรเทียบกับการทดสอบหน่วยโดยเฉลี่ย) และถ้ามันทดสอบรหัสจริงหรือกรอบพื้นฐาน