คำตอบส่วนใหญ่ในที่นี้ดูเหมือนจะกล่าวถึงแนวทางปฏิบัติที่ดีที่สุดในการทดสอบหน่วยโดยทั่วไป (เมื่อใดที่ไหนทำไมและอะไร) แทนที่จะเขียนแบบทดสอบด้วยตนเอง (อย่างไร) เนื่องจากคำถามดูค่อนข้างเฉพาะเจาะจงในส่วน "อย่างไร" ฉันจึงคิดว่าจะโพสต์สิ่งนี้โดยนำมาจากการนำเสนอ "กระเป๋าสีน้ำตาล" ที่ฉันจัดทำที่ บริษัท ของฉัน
การทดสอบกฎการเขียน 5 ข้อของ Womp:
1. ใช้ชื่อวิธีการทดสอบแบบพรรณนาแบบยาว ๆ
- Map_DefaultConstructorShouldCreateEmptyGisMap()
- ShouldAlwaysDelegateXMLCorrectlyToTheCustomHandlers()
- Dog_Object_Should_Eat_Homework_Object_When_Hungry()
2. เขียนการทดสอบของคุณในรูปแบบสไตล์ / พระราชบัญญัติ / ยืนยัน
- ในขณะที่กลยุทธ์ระดับองค์กรนี้มีมาระยะหนึ่งแล้วและมีชื่อเรียกหลายอย่าง แต่การเปิดตัวคำย่อ "AAA" เมื่อเร็ว ๆ นี้เป็นวิธีที่ดีในการแก้ไขปัญหานี้ การทดสอบทั้งหมดของคุณสอดคล้องกับรูปแบบ AAA ทำให้ง่ายต่อการอ่านและบำรุงรักษา
3. ให้ข้อความแสดงความล้มเหลวพร้อมกับ Asserts ของคุณเสมอ
Assert.That(x == 2 && y == 2, "An incorrect number of begin/end element
processing events was raised by the XElementSerializer");
- การฝึกฝนที่เรียบง่าย แต่คุ้มค่าที่ทำให้เห็นได้ชัดในการสมัครนักวิ่งของคุณว่าอะไรล้มเหลว หากคุณไม่ได้ระบุข้อความคุณมักจะได้รับข้อความ "คาดว่าจริงเป็นเท็จ" ในผลลัพธ์ความล้มเหลวซึ่งทำให้คุณต้องไปอ่านการทดสอบเพื่อดูว่ามีอะไรผิดปกติ
4. แสดงความคิดเห็นเหตุผลของการทดสอบ - สมมติฐานทางธุรกิจคืออะไร?
/// A layer cannot be constructed with a null gisLayer, as every function
/// in the Layer class assumes that a valid gisLayer is present.
[Test]
public void ShouldNotAllowConstructionWithANullGisLayer()
{
}
- สิ่งนี้อาจดูเหมือนชัดเจน แต่การปฏิบัตินี้จะปกป้องความสมบูรณ์ของการทดสอบของคุณจากผู้ที่ไม่เข้าใจเหตุผลเบื้องหลังการทดสอบตั้งแต่แรก ฉันเคยเห็นการทดสอบจำนวนมากถูกลบหรือแก้ไขซึ่งทำได้ดีมากเพียงเพราะบุคคลนั้นไม่เข้าใจสมมติฐานที่การทดสอบกำลังตรวจสอบ
- หากการทดสอบไม่สำคัญหรือชื่อวิธีการอธิบายเพียงพอก็อนุญาตให้ปิดความคิดเห็นได้
5. การทดสอบทุกครั้งจะต้องเปลี่ยนสถานะของทรัพยากรที่สัมผัสเสมอ
- ใช้การล้อเลียนหากเป็นไปได้เพื่อหลีกเลี่ยงการจัดการกับทรัพยากรจริง
- การล้างข้อมูลต้องทำในระดับทดสอบ การทดสอบจะต้องไม่ขึ้นอยู่กับลำดับการดำเนินการใด ๆ