การเลือกชื่อสำหรับการทดสอบการรวม


13

ด้วยการทดสอบหน่วยโดเมนมีขนาดค่อนข้างเล็กดังนั้นจึงง่าย ฉันใช้methodName_conditions_result()รูปแบบของ Osherove และพบว่าชัดเจนมาก

แต่ด้วยการทดสอบการรวมตัวฉันรู้สึกว่ามันจะทำให้ชื่อยาวมากและฉันจะแทนที่methodNameอะไร? ฉันจะตั้งชื่อคลาสทดสอบรวมได้อย่างไร

ยินดีต้อนรับสู่ตัวอย่างการใช้งานจริงของชื่อการทดสอบการรวมระบบ ฉันหวังว่าคำตอบจะช่วยให้ฉันเข้าใจการทดสอบเหล่านี้ได้ดีขึ้น


1
ทำไมคำถามนี้จึงถูกลดระดับลง (สองครั้ง)
bigstones

คำตอบ:


6

ฉันใช้แนวทางที่แตกต่างเล็กน้อยกับการทดสอบหน่วยและการรวม ฉันลองตั้งชื่อพวกเขาตามคุณสมบัติให้มากที่สุด จากนั้นเมื่อการทดสอบทั้งหมดผ่านคุณจะเห็นรายการคุณลักษณะทั้งหมดที่ใช้งานได้และไม่ทำงาน

  • canRegisterUser
  • canHandleInvalidInput
  • canRelayDocumentBetweenServers
  • canCreateSchema
  • canLoginUsingWebService
  • canLoginUsingBasicAuth
  • canDeleteDocument
  • canAddDocument

มันไม่ได้เป็นวิธีปฏิบัติเสมอไปที่ชื่อการทดสอบด้วยวิธีนี้ แต่มันจะมีประโยชน์มากโดยเฉพาะอย่างยิ่งหลังจากอ่านผ่านการทดสอบหลายร้อยหน่วยและการรวม ชื่อคลาสที่ครอบคลุมซึ่งมีวิธีการเหล่านี้ควรบ่งบอกถึงคุณลักษณะที่กำลังทดสอบ มันจะช่วยให้กับองค์กร

ฉันยังขอแนะนำให้ตั้งชื่อหน่วยการทดสอบใด ๆ สำหรับbugfix1002การแก้ไขข้อบกพร่องด้วยคำนำหน้าที่ไม่ซ้ำกันเช่นเพื่อพิสูจน์ว่าข้อผิดพลาดได้รับการแก้ไขแล้ว


5

สิ่งนี้เขียนขึ้นเพื่อช่วยในการทดสอบหน่วย แต่บางทีคุณอาจพบว่ามีการใช้กฎเดียวกัน (มากหรือน้อย) ในการทดสอบการรวม:

ลองดูเจ็ดขั้นตอน !

การตั้งค่าของฉันคือสิ่งที่คุณเรียกว่ามันเป็นชื่อชุดทดสอบ (ชื่อตัวติดตั้งบนการ์ดของเรา) ผลที่คุณตรวจสอบและข้อความยืนยันที่ต้องโดดเด่นและทำให้เกิดข้อผิดพลาดชัดเจน หากคุณพบว่าการตั้งชื่อของ Asherove ง่ายที่สุดฉันขอรับรองด้วยว่า แต่เคล็ดลับคือคุณเติมส่วน "วิธีการ" กับสิ่งที่ทำให้เงื่อนไขผลและข้อยกเว้นทำให้รู้สึก

ฉันยินดีที่จะเห็นชุดชื่อ "MakingADeposit" พร้อมการทดสอบที่ชื่อว่า "AccountDoesntExist" และข้อผิดพลาดที่ระบุว่า "คาดหวัง NonesuchAccount ยกเว้น - ไม่ได้รับ"

อีกทางเลือกหนึ่งถ้าคุณไม่รังเกียจที่จะแยกชื่อชุดทดสอบด้วย "::" ฉันก็โอเคกับ "AccountHandling :: MakingADositiAccountDoesntExist_ThrowsAnException"

บัตรดังกล่าวยังแนะนำว่าหากคุณไม่มีชื่อที่ดีให้ดำเนินการต่อไปและให้ชื่อที่ดีขึ้นเมื่อมีคนหนึ่งเกิดขึ้นกับคุณ (หวังว่าจะดีก่อนที่จะส่งรหัสไปยัง CI)


2

การทดสอบการรวมควรปฏิบัติตามกฎที่คล้ายกันกับการทดสอบหน่วยในการทดสอบแต่ละครั้งควรทดสอบแง่มุมหนึ่งด้านของข้อกำหนด แต่ทดสอบระบบโดยรวม ชั้นควรตั้งชื่อสิ่งโดยรวมที่กำลังทดสอบเช่น "TpcInputValidation" และการตั้งชื่อของวิธีการควรสะท้อนอย่างชัดเจนว่าการทดสอบพยายามทำอะไรโดยไม่ใช้คำพูดมากเกินไปเช่น "shouldRaiseValidationErrorWithBadDates ()"

วิธีการควรทดสอบหนึ่งแนวคิดของคุณลักษณะและการยืนยันจำนวนมากสามารถระบุเป็นอย่างอื่นได้ (อ้างอิง "รหัสที่สะอาด: คู่มือฝีมือความคล่องแคล่วของซอฟต์แวร์เปรียว" หน้า 132 โดย Robert Martin)


ทำไมคุณถึงเชื่อว่า "คุณลักษณะหนึ่ง" โดยทั่วไปเท่ากับ "หนึ่งยืนยัน" ดูเหมือนว่าคุณต้องการยืนยันว่าระบบอยู่ในสถานะที่คุณคาดหวังว่าจะเป็นในซึ่งอาจเป็นจำนวนยืนยันใด ๆ แต่ฉันพูดนอกเรื่องเพราะคำถามเกี่ยวกับการตั้งชื่อไม่ใช่วิธีการเขียนการทดสอบการรวม
Jeremy Heiler

@ แอนดรูว์ฉันไม่ได้บอกว่ามันเป็นกฎที่ยาก แต่การดูจำนวนการยืนยันสามารถช่วยในการทดสอบแนวความคิดเกี่ยวกับคุณลักษณะที่ไม่จำเป็นต้องใช้วิธีเดียว การรักษาขอบเขตให้ค่อนข้าง จำกัด ช่วยระบุว่าปัญหาอยู่ตรงไหนเมื่อล้มเหลว แต่ฉันจะให้คุณว่ามันไม่ดีที่จะพูดคำยืนยันอย่างใดอย่างหนึ่งและฉันจะแก้ไขมันออกมาขอบคุณ
Turnkey

1

ดังนั้นปัญหาคือชื่อที่เหมาะสมของการทำงานยาวเกินไปสำหรับชื่อวิธี? ฉันรู้ว่ามันน่าอึดอัดใจที่จะเริ่มเขียนวิธีทดสอบด้วยชื่อที่ชอบregisterAndValidateUnderageUniversityDriverWithCoverageSetA_test()และอาจทำลายกฎคอมไพเลอร์สำหรับชื่อเมธอดแบบยาว (PL / SQL อนุญาตได้เพียง 30 ตัวอักษรเท่านั้น - ฉันไม่รู้ว่า Java และ C # กำหนดข้อ จำกัด ชื่อสั้น ๆ ถ้ามันไม่ผ่านจุดหนึ่งไปเลยและชื่อเมธอดที่ยาวจริงๆอาจมีประโยชน์สำหรับโค้ดที่สร้างขึ้นซึ่งถูกอ่าน / จัดการโดยโค้ดที่สร้างขึ้นอื่น ๆ ) คุณสามารถลองย่อให้สั้นลงregValUnderageUnivDrvrWCovrgA_test()แต่มันก็น่ากลัวจริงๆที่จะอ่าน ตัวเลือกหนึ่งที่ฉันเคยใช้ที่ฉันไม่ชอบ แต่เป็นตัวเลือกที่ดีที่สุดในเวลานั้นunderageUnivDrvr_test_01()และจากนั้นก็มีการสเปรดชีตการแมปชื่อวิธีกับคำอธิบายที่ยาวกว่าของฟังก์ชันที่กำลังทดสอบ น่าเกลียด แต่ก็ใช้ได้ดี คุณสามารถจัดทำเอกสารคำอธิบายของการทดสอบในเอกสารของฟังก์ชั่นในไฟล์ต้นฉบับซึ่งอาจเป็นประโยชน์เพราะคุณสามารถสร้างเอกสารประกอบการทดสอบโดยตรงจากรหัสแทนการแมปไปมาระหว่างสเปรดชีตและรหัส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.