คำถามติดแท็ก tdd

TDD หมายถึงการพัฒนาที่ขับเคลื่อนด้วยการทดสอบหรือการออกแบบที่ขับเคลื่อนด้วยการทดสอบ มันเป็นวิธีปฏิบัติของการเขียนการทดสอบหน่วยก่อนที่จะเขียนรหัสเพื่อตอบสนองมันในสิ่งที่เรียกว่าวงจร Red-Green-Refactor

9
TDD: ฉันทำถูกไหม?
ฉันเป็นโปรแกรมเมอร์คนใหม่ (เพิ่งเรียนรู้มาประมาณหนึ่งปี) และในเป้าหมายของฉันที่จะดีขึ้นฉันเพิ่งเรียนรู้เกี่ยวกับ TDD ฉันต้องการใช้มันให้เป็นนิสัยเพราะมันมีประโยชน์มาก ฉันต้องการตรวจสอบและตรวจสอบให้แน่ใจว่าฉันใช้อย่างถูกต้อง ฉันกำลังทำอะไรอยู่: คิดวิธีการใหม่ที่ฉันต้องการ สร้างการทดสอบสำหรับวิธีการนั้น การทดสอบล้มเหลว วิธีการเขียน ผ่านการทดสอบ วิธีการ Refactor ทำซ้ำ ฉันใช้วิธีนี้ทุกวิธีที่ฉันเขียนมีบางอย่างที่ฉันไม่ควรกังวล ต่อมาฉันมักจะนึกถึงวิธีทดสอบวิธีการที่มีอยู่แล้วของฉันในแบบหรือสถานการณ์อื่น ฉันควรทำแบบทดสอบใหม่ที่ฉันคิดหรือเพราะแต่ละวิธีมีการทดสอบของตัวเองแล้วฉันไม่ควรรำคาญหรือไม่? ฉันขอทดสอบรหัสของฉันได้ไหมฉันคิดว่าเป็นปัญหาหลักของฉันในการถามเรื่องนี้ แก้ไข นอกจากนี้ยังเป็นสิ่งที่ฉันเพิ่งสงสัย เมื่อทำอะไรบางอย่างเช่นการสร้าง GUI TDD จำเป็นไหมในสถานการณ์นั้น? โดยส่วนตัวฉันคิดไม่ออกเลยว่าจะเขียนข้อสอบอย่างไร
14 tdd 

3
ความตั้งฉากของการทดสอบหน่วยเทียบกับความรัดกุมของการทดสอบหน่วย
ฉันกำลังเขียนบททดสอบสำหรับระบบบังคับเลี้ยวสำหรับวิดีโอเกม ระบบมีพฤติกรรมหลายอย่าง (หลีกเลี่ยงบริเวณนี้เนื่องจากเหตุผล A, หลีกเลี่ยงบริเวณนี้เนื่องจากเหตุผล B แต่ละคนเพิ่มบริบทเล็กน้อยลงในแผนที่ของภูมิภาคจากนั้นฟังก์ชั่นแยกต่างหากจะแยกวิเคราะห์แผนที่และสร้างการเคลื่อนไหวที่ต้องการ ฉันมีปัญหาในการตัดสินใจว่าจะเขียนบททดสอบหน่วยสำหรับพฤติกรรมอย่างไร ในฐานะที่เป็น TDD แนะนำฉันสนใจเฉพาะในพฤติกรรมที่มีผลต่อการเคลื่อนไหวที่ต้องการ ตัวอย่างเช่นการหลีกเลี่ยงเพราะเหตุผลเหตุผลควรส่งผลให้การเคลื่อนไหวอยู่ในตำแหน่งที่ไม่ดีแนะนำ ฉันไม่สนใจจริง ๆ ว่าพฤติกรรมจะเพิ่มบริบทลงในแผนที่ได้อย่างไรเพียง แต่การเคลื่อนไหวที่ต้องการอยู่ห่างจากตำแหน่ง ดังนั้นการทดสอบของฉันสำหรับแต่ละลักษณะการตั้งค่าลักษณะการทำงานทำให้มันเขียนลงในแผนที่จากนั้นดำเนินการฟังก์ชั่นการแยกแผนที่เพื่อคำนวณการเคลื่อนไหวที่ต้องการ หากการเคลื่อนไหวนั้นเป็นไปตามข้อกำหนดของฉันฉันก็มีความสุข อย่างไรก็ตามตอนนี้การทดสอบของฉันขึ้นอยู่กับทั้งพฤติกรรมที่ทำงานอย่างถูกต้องและฟังก์ชั่นการแยกวิเคราะห์แผนที่ทำงานอย่างถูกต้อง หากฟังก์ชั่นการวิเคราะห์คำล้มเหลวฉันจะได้รับการทดสอบที่ล้มเหลวหลายร้อยครั้งแทนที่จะเป็นสองสามครั้ง คู่มือการเขียนการทดสอบจำนวนมากแนะนำว่านี่เป็นความคิดที่ไม่ดี อย่างไรก็ตามถ้าฉันทดสอบโดยตรงกับผลลัพธ์ของพฤติกรรมโดยเยาะเย้ยแผนที่แล้วแน่นอนว่าฉันมีเพศสัมพันธ์กับการใช้งานแน่นเกินไป? หากฉันสามารถรับการเคลื่อนไหวที่ต้องการจากแผนที่โดยใช้พฤติกรรมที่แตกต่างกันเล็กน้อยการทดสอบก็ควรผ่าน ดังนั้นตอนนี้ฉันกำลังทุกข์ทรมานกับความไม่ลงรอยกันทางปัญญา วิธีที่ดีที่สุดในการจัดโครงสร้างการทดสอบเหล่านี้คืออะไร
14 tdd  unit-testing 

6
ค้นหากรณีศึกษาว่า TDD ปรับปรุงคุณภาพและ / หรือความเร็วในการพัฒนาอย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ที่ บริษัท ของฉันฉันกำลังพยายามหาเหตุผลว่าทำไมเราควรทำ TDD ในปัจจุบันนักพัฒนาส่วนใหญ่เพียงทำทุกอย่างเท่าที่ทำได้เพื่อให้โครงการเสร็จสิ้นจากนั้นไปเพิ่มการทดสอบหน่วยหลังจากข้อเท็จจริงเพื่อให้ตรงกับตัวชี้วัดของผู้จัดการ ตัวอย่างใด ๆ จาก บริษัท ที่มีชื่อเสียงที่ทำ TDD และเห็นประโยชน์จะได้รับการชื่นชมอย่างมาก
14 tdd 

4
เมื่อใดที่ฉันควรใช้วัตถุจำลอง
ฉันได้อ่านสิ่งต่าง ๆ มากมายเกี่ยวกับ TDD แต่ฉันยังมีข้อสงสัย ตัวอย่างเช่นฉันมีไดอะแกรมคลาสเหล่านี้: มันเป็นตัวอย่างง่ายๆเพียงเพื่อเรียนรู้เกี่ยวกับ TDD และวัตถุจำลอง ฉันควรเขียนแบบทดสอบใดก่อน ผลิตภัณฑ์จากนั้นLineและสุดท้ายสั่งซื้อ ? ถ้าฉันทำเช่นนั้นฉันควรใช้LineและProductเพื่อทดสอบคำสั่งซื้อหรือฉันควรใช้ Mock Objects? เมื่อใดที่ฉันควรใช้ Mock Objects ฉันควรใช้ UML กับ XP และ TDD หรือไม่ ฉันยังไม่ได้รับสิ่งเหล่านี้

3
TDD สำหรับการประมวลผลแบบแบตช์: จะทำอย่างไร?
ฉันชอบ "สีแดง / สีเขียว / refactor" สำหรับ RoR ฯลฯ ก็โอเค งานวันของฉันเกี่ยวข้องกับการประมวลผลแบบแบตช์ไฟล์ที่มีขนาดใหญ่มากจากบุคคลที่สามในหลามและเครื่องมือที่กำหนดเองอื่น ๆ การเปลี่ยนแปลงคุณลักษณะของไฟล์เหล่านี้สูงดังนั้นจึงมีการแก้ไข / ปรับปรุงจำนวนมากที่ใช้บ่อย การทดสอบการถดถอยผ่านเนื้อหาการทดสอบที่รู้จักซึ่งมีผลลัพธ์ที่คาดหวังไม่มีอยู่ สิ่งที่ใกล้เคียงที่สุดกำลังทำงานกับชุดสุดท้ายที่มีกรณีทดสอบใหม่ที่เขียนด้วยมือตรวจสอบให้แน่ใจว่ามันไม่ระเบิดจากนั้นใช้การตรวจสอบเฉพาะจุดและการทดสอบทางสถิติเพื่อดูว่าข้อมูลยังดูดีหรือไม่ Q >> จะนำหลักการของ TDD มาสู่สิ่งแวดล้อมแบบนี้ได้อย่างไร?
14 testing  tdd 

4
คุณจะทำให้การทดสอบของคุณทำงานได้อย่างมีประสิทธิภาพขณะที่คุณออกแบบใหม่
codebase ที่ผ่านการทดสอบเป็นอย่างดีมีประโยชน์หลายประการ แต่การทดสอบบางแง่มุมของระบบจะส่งผลให้เป็น codebase ที่ทนทานต่อการเปลี่ยนแปลงบางประเภท ตัวอย่างคือการทดสอบผลลัพธ์เฉพาะ - เช่นข้อความหรือ HTML การทดสอบมักจะเขียน (ไร้เดียงสา?) เพื่อคาดหวังว่าจะมีบล็อกข้อความที่เฉพาะเจาะจงเป็นเอาต์พุตสำหรับพารามิเตอร์ป้อนเข้าบางส่วนหรือเพื่อค้นหาส่วนเฉพาะในบล็อก การเปลี่ยนพฤติกรรมของรหัสเพื่อตอบสนองความต้องการใหม่หรือเนื่องจากการทดสอบการใช้งานได้ส่งผลให้เกิดการเปลี่ยนแปลงในส่วนต่อประสานจำเป็นต้องเปลี่ยนการทดสอบด้วย - บางทีแม้แต่การทดสอบที่ไม่ได้เป็นการทดสอบหน่วยโดยเฉพาะสำหรับรหัสที่กำลังเปลี่ยนแปลง คุณจะจัดการงานในการค้นหาและเขียนการทดสอบเหล่านี้ใหม่ได้อย่างไร? จะทำอย่างไรถ้าคุณไม่สามารถ "เรียกใช้" ทั้งหมดและปล่อยให้กรอบเรียงลำดับออก " ผลการทดสอบภายใต้รหัสอื่น ๆ ประเภทใดในการทดสอบที่เปราะบางเป็นปกติ

1
จะทดสอบโค้ดประมวลผลภาพได้อย่างไร?
ฉันทำงานในการประมวลผลภาพ (ส่วนใหญ่เป็น OCR) และฉันสงสัยว่าฉันควรรวมการทดสอบหน่วยในการพัฒนาของฉันอย่างไร ฉันใช้การทดสอบหน่วยสำหรับรหัสประเภท "ทั่วไป" มากกว่านี้ แต่เมื่อจัดการกับรหัสการประมวลผลภาพฉันไม่แน่ใจว่าจะจัดการกับมันอย่างไร รหัสชนิดนี้ต้องการข้อมูลอินพุต / เอาท์พุตของภาพเสมอและการเยาะเย้ยสิ่งนี้ไม่ชัดเจน สำหรับตอนนี้ฉันส่วนใหญ่ทำการทดสอบการรวม แต่พวกเขาใช้เวลาสักครู่ในการทำงานและฉันต้องการความคิดเกี่ยวกับวิธีการแบ่งรหัสประเภทนี้เป็นการทดสอบหน่วยเพื่อให้ฉันสามารถเรียกใช้พวกเขาได้เร็วขึ้น แก้ไข: การวิเคราะห์ตัวละครสามารถผ่านหลายขั้นตอนที่เกี่ยวข้องกับการหมุนหลายครั้งการปรับขนาดและการทำงานของก้าน ขั้นตอนเหล่านี้เปลี่ยนแปลงบ่อยครั้งเมื่ออัลกอริทึมกำลังพัฒนา ดังนั้นอินพุทและเอาท์พุทที่คาดหวังสามารถพัฒนาได้มากในขณะทดสอบ อักขระแต่ละตัวสามารถมีขนาด 100x100 พิกเซลได้ดังนั้นจึงไม่สามารถเข้ารหัสในรหัสหรือทำงานกับข้อมูลที่สร้างขึ้นได้

4
คุณสามารถ TDD สำหรับข้อบกพร่องที่สามารถทดสอบได้หลังจากที่ได้รับการแก้ไขแล้วเท่านั้น?
นี่คือตัวอย่างหนึ่ง: เว็บแอปพลิเคชันของฉันมีองค์ประกอบที่สามารถลากได้ เมื่อลากองค์ประกอบเบราว์เซอร์จะสร้าง "ภาพผี" ฉันต้องการลบ "อิมเมจโกสต์" เมื่อลากแล้วเขียนการทดสอบสำหรับพฤติกรรมนี้ ปัญหาของฉันคือตอนแรกฉันไม่รู้ว่าจะแก้ไขข้อผิดพลาดนี้ได้อย่างไรและวิธีเดียวที่ฉันสามารถเขียนการทดสอบคือหลังจากที่ฉันแก้ไขแล้ว ในฟังก์ชั่นง่าย ๆ เช่นlet sum = (a, b) => a - bคุณสามารถเขียนการทดสอบว่าทำไมsum(1, 2)ไม่เท่ากัน3ก่อนที่จะเขียนโค้ดใด ๆ ในกรณีที่ฉันอธิบายฉันไม่สามารถทดสอบได้เพราะฉันไม่ทราบว่าการตรวจสอบคืออะไร (ฉันไม่รู้ว่าการยืนยันควรเป็นอย่างไร) วิธีแก้ไขปัญหาที่อธิบายคือ: let dataTransfer = e.dataTransfer let canvas = document.createElement('canvas'); canvas.style.opacity = '0'; canvas.style.position = 'absolute'; canvas.style.top = '-1000px'; dataTransfer.effectAllowed = 'none'; document.body.appendChild(canvas); dataTransfer.setDragImage(canvas, 0, 0); ฉันไม่สามารถรู้ได้ว่านี่เป็นวิธีแก้ปัญหา ฉันไม่สามารถเขียนแบบทดสอบได้หลังจากหาวิธีแก้ปัญหาออนไลน์เพราะวิธีเดียวที่ฉันจะรู้ได้ถ้ามันใช้งานได้จริงก็คือการเพิ่มรหัสนี้ลงใน …

1
สามารถใช้วิธีการ TDD จากบนลงล่างได้หรือไม่
ฉันไม่ชัดเจนว่า TDD วิธีการจัดการกรณีต่อไปนี้อย่างไร สมมติว่าฉันต้องการใช้อัลกอริทึมการรวมใน Python ฉันเริ่มต้นด้วยการเขียน assert mergesort([]) === [] และการทดสอบล้มเหลวด้วย NameError: ไม่ได้กำหนดชื่อ 'การรวม' ฉันเพิ่มแล้ว def mergesort(a): return [] และการทดสอบของฉันผ่าน ต่อไปฉันเพิ่ม assert mergesort[5] == 5 และการทดสอบของฉันล้มเหลวด้วย AssertionError ซึ่งฉันทำไปด้วย def mergesort(a): if not a: return [] else: return a ต่อไปฉันเพิ่ม assert mergesort([10, 30, 20]) == [10, 20, 30] และตอนนี้ฉันต้องพยายามทำบัตรผ่านนี้ ฉัน "รู้" …
13 tdd 

3
ความแตกต่างระหว่างการกำหนดเมื่อถึงตอนนั้น (GWT) และ Arrange Act Assert (AAA)?
ใน TDD มีไวยากรณ์จัดเรียง Assert (AAA): [Test] public void Test_ReturnItemForRefund_ReturnsStockOfBlackSweatersAsTwo_WhenOneInStockAndOneIsReturned() { //Arrange ShopStock shopStock = new ShopStock(); Item blackSweater = new Item("ID: 25"); shopStock.AddStock(blackSweater); int expectedResult = 2; Item blackSweaterToReturn = new Item("ID: 25"); //Act shopStock.ReturnItemForRefund(blackSweaterToReturn); int actualResult = shopStock.GetStock("ID: 25"); //Assert Assert.AreEqual(expectedResult, actualResult); } ในการทดสอบการเขียน BDD ใช้โครงสร้างที่คล้ายกัน แต่มีไวยากรณ์เมื่อเมื่อ (GWT): [Given(@"a …
13 c#  unit-testing  tdd  bdd 

1
กลยุทธ์การทดสอบเกม
ฉันได้รับเกมการศึกษาทางเว็บ ปีที่ผ่านมาฉันได้ทำงานเพื่อรักษาเสถียรภาพโค้ดและเพิ่มคุณสมบัติใหม่ ตรรกะส่วนใหญ่อยู่ใน Front-end ดังนั้นการทดสอบยูนิตส่วนหลังจึงมีประโยชน์ครอบคลุมรหัสเล็กน้อย เกมดังกล่าวได้มาถึงจุดที่มันเริ่มซับซ้อน มีสองโหมดที่แตกต่างกันสำหรับแต่ละเกมและเกมจะทำงานแตกต่างกันไปตามโหมด นอกจากนี้ยังมีธงต่าง ๆ ที่ส่งผลต่อการเล่นเกม ฉันเป็นนักพัฒนาแอพพลิเคชั่นมานานกว่า 10 ปีและนี่ทำให้ฉันงุนงง ในโลกธุรกิจอัลกอริทึมจะทำหน้าที่ในลักษณะเดียวกันเสมอ ฉันจะเขียนการทดสอบหน่วยสำหรับอัลกอริทึมฉันจะคาดหวังค่า 42 และมันจะผิดพลาดถ้าฉันไม่ได้รับค่านั้น เมื่อพูดถึงเกมฉันหลงทาง ฉันจะทดสอบพวกเขาได้อย่างไร ฉันมีผู้ทดสอบให้ฉัน ฉันสามารถใช้เวลาเขียนแบบทดสอบหน่วย ผู้ทดสอบ ... ไม่น่าเชื่อถือ พวกเขาไม่ได้ดีที่สุดในการขจัดปัญหาและฉันไม่ได้ให้ทิศทางที่ดีที่สุดแก่พวกเขา ใช้เวลาไม่นานในการทดสอบการปล่อยและการรวมกันของเกมทุกครั้งฉันจะใช้มันเป็นทรัพยากรได้อย่างไร การทดสอบหน่วยดู จำกัด เนื่องจากตรรกะส่วนใหญ่เป็นจาวาสคริปต์ (และฉันรับรหัสสปาเก็ตตี้) ฉันสามารถใช้ชุดส่วนหน้าเช่น Cucumber หรือซีลีเนียมเพื่อให้แน่ใจว่าคุณสมบัติบางอย่างทำงานได้ นั่นเป็นกลยุทธ์ที่ดีที่สุดเหรอ? บริษัท เกมทำการทดสอบเกมอย่างไร ฉันได้อ่านคำถาม " ทดสอบการพัฒนาเพื่อรองรับเกมที่ซับซ้อน " (ท่ามกลางเกมอื่น ๆ ในไซต์) แต่ไม่ได้กล่าวถึงสิ่งที่ฉันกำลังมองหา ฉันขอกลยุทธ์ไม่ใช่ตัวอย่างเฉพาะของวิธีทดสอบ

5
ประเภทของการทดสอบหน่วยตามประโยชน์
จากมุมมองค่าฉันเห็นการทดสอบหน่วยสองกลุ่มในทางปฏิบัติของฉัน: การทดสอบที่ทดสอบตรรกะบางอย่างที่ไม่สำคัญ การเขียนพวกเขา (ไม่ว่าจะก่อนนำไปใช้หรือหลัง) เปิดเผยปัญหา / ข้อบกพร่องที่อาจเกิดขึ้นและช่วยให้มั่นใจในกรณีที่ตรรกะเปลี่ยนไปในอนาคต การทดสอบที่ทดสอบตรรกะเล็กน้อยบางอย่าง การทดสอบเหล่านั้นเหมือนรหัสเอกสาร (โดยทั่วไปจะมี mocks) มากกว่าการทดสอบ เวิร์กโฟลว์การบำรุงรักษาของการทดสอบเหล่านั้นไม่ใช่ "ตรรกะบางอย่างเปลี่ยนไปการทดสอบกลายเป็นสีแดง - ขอบคุณพระเจ้าที่ฉันเขียนการทดสอบนี้" แต่ "การเปลี่ยนแปลงรหัสเล็กน้อยบางการทดสอบกลายเป็นลบเชิงลบ - ฉันต้องรักษา (เขียนใหม่) การทดสอบ . ส่วนใหญ่การทดสอบเหล่านั้นไม่คุ้มค่าที่จะรักษา และจากประสบการณ์ของฉันในหลาย ๆ ระบบการทดสอบเหล่านั้นก็เหมือนกับ 80% ของการทดสอบทั้งหมด ฉันพยายามค้นหาว่าคนอื่นคิดอย่างไรในหัวข้อการทดสอบแยกหน่วยตามค่าและวิธีการที่สอดคล้องกับการแยกของฉัน แต่สิ่งที่ฉันเห็นส่วนใหญ่ก็คือโฆษณาชวนเชื่อ TDD แบบเต็มเวลาหรือการทดสอบคือการโฆษณาชวนเชื่อที่ไร้ประโยชน์เพียงแค่เขียน - เขียน - โค้ด ฉันสนใจบางอย่างที่อยู่ตรงกลาง ความคิดของคุณเองหรือการอ้างอิงถึงบทความ / เอกสาร / หนังสือยินดีต้อนรับ
13 unit-testing  tdd 

2
ฉันควรกำหนดหน่วยการทดสอบอีกครั้งเมื่อฉันแยกคลาสออกจากระบบภายใต้การทดสอบหรือไม่
ฉันเขียนคลาสนี้ที่ทำบางสิ่ง (บางทีนี่อาจเป็นการละเมิดหลักการความรับผิดชอบเดี่ยว) ตอนนี้ฉันรู้แล้วว่าบางส่วนของโครงการต้องการตรรกะชิ้นหนึ่งและวิธีที่ฉันจะเปิดเผยก็คือการดึงคลาสออกจากระบบเดิมภายใต้การทดสอบของฉัน ฉันคาดหวังว่าจะสามารถทำได้โดยไม่ต้องเปลี่ยนรหัสทดสอบใด ๆ แต่เมื่อฉันเสร็จคุณสามารถยืนยันว่าการทดสอบไม่ใช่การทดสอบหน่วยอีกต่อไป มันจะทำการทดสอบคลาสเดิมและคลาสที่ฉันแยกออกมา กล่าวอีกนัยหนึ่งฉันจะมีหนึ่งกรณีทดสอบ แต่สองระบบภายใต้การทดสอบ ฉันควร refactor รหัสทดสอบของฉันหลังจากที่ฉันทำเสร็จแล้ว? IE: สร้าง ExtractedClassTest และย้ายการทดสอบที่เกี่ยวข้องทั้งหมดจาก OriginalClassTest ลงไปหรือไม่ ดูเหมือนว่าอาจมีความเสี่ยงเล็กน้อย: ฉันอาจสูญเสียความครอบคลุมบางส่วนในกระบวนการอาจไม่ง่ายเหมือนการย้ายการทดสอบและฉันสิ้นสุดการเขียนรหัสการทดสอบบางอย่างที่ฉันรู้ว่าเคยทำงาน แต่อาจไม่ได้อีกต่อไป เป็นต้น ในทางกลับกันถ้าฉันปล่อยให้ OriginalClassTest ตามเดิมฉันสามารถเห็นว่านี่เป็นปัญหาการบำรุงรักษาทดสอบ มันจะสับสนเล็กน้อยในการค้นหาที่การทดสอบของ ExtractedClass ความประทับใจแรกของคุณก็คือมันไม่มีอยู่จริง เมื่อเวลาผ่านไปด้วยการปรับโครงสร้างรหัสการผลิตจำนวนมากสิ่งนี้อาจกลายเป็นปัญหาร้ายแรง ฉันใหม่สำหรับ TDD ดังนั้นฉันต้องการคำแนะนำจากผู้เชี่ยวชาญ ขอบคุณ!

3
คุณจะจัดการกับเวลาการคอมไพล์ที่ยาวขึ้นเมื่อทำงานกับเทมเพลตได้อย่างไร?
ฉันใช้ Visual Studio 2012 และเขามีกรณีที่เราเพิ่มพารามิเตอร์แม่แบบให้กับคลาส "เพียง" เพื่อแนะนำ "จุดตะเข็บ" เพื่อให้ในการทดสอบหน่วยเราสามารถแทนที่ส่วนเหล่านั้นด้วยวัตถุจำลอง โดยปกติคุณจะแนะนำจุดตะเข็บใน C ++ ได้อย่างไร: การใช้อินเตอร์เฟสและ / หรือการผสมตามเกณฑ์บางอย่างที่มีอินเตอร์เฟสนัยโดยใช้พารามิเตอร์เทมเพลตด้วย? เหตุผลหนึ่งที่ต้องถามเรื่องนี้ก็เพราะเมื่อบางครั้งการรวบรวมไฟล์ C ++ ไฟล์เดียว (ที่มีไฟล์แม่แบบที่อาจรวมถึงแม่แบบอื่น ๆ ) ส่งผลให้ในวัตถุไฟล์ที่ถูกสร้างขึ้นที่ใช้เวลาประมาณ 5-10 วินาทีในเครื่องนักพัฒนา . VS คอมไพเลอร์ยังไม่รวดเร็วโดยเฉพาะอย่างยิ่งในการรวบรวมเทมเพลตเท่าที่ฉันเข้าใจและเนื่องจากรูปแบบการรวมเทมเพลต (คุณได้รวมคำจำกัดความของเทมเพลตในทุกไฟล์ที่ใช้มันโดยอ้อมและอาจเป็นอินสแตนซ์เทมเพลตนั้นทุกครั้ง สิ่งที่ไม่มีส่วนเกี่ยวข้องกับเทมเพลตนั้น) คุณอาจมีปัญหากับเวลาในการคอมไพล์ (เมื่อทำการคอมไพล์แบบเพิ่มเติม) คุณมีวิธีจัดการกับเวลารวบรวมแบบเพิ่มขึ้น (และไม่เพียง) เมื่อทำงานกับแม่แบบ (นอกเหนือจากคอมไพเลอร์ที่ดีขึ้น / เร็วขึ้น :-))
13 c++  tdd  templates 

1
การห่อรหัสบุคคลที่สามเป็นทางออกเดียวในการทดสอบผู้บริโภคหรือไม่
ฉันทำการทดสอบหน่วยและในชั้นเรียนของฉันฉันต้องส่งจดหมายจากวิธีใดวิธีหนึ่งดังนั้นการใช้การฉีดคอนสตรัคเตอร์ฉันฉีดอินสแตนซ์ของZend_Mailคลาสที่อยู่ในกรอบ Zend ตอนนี้บางคนยืนยันว่าถ้าห้องสมุดมีความมั่นคงเพียงพอและจะไม่เปลี่ยนแปลงบ่อยครั้งก็ไม่จำเป็นต้องห่อมัน ดังนั้นสมมติว่าZend_Mailมันเสถียรและจะไม่เปลี่ยนแปลงและมันก็เหมาะกับความต้องการของฉันทั้งหมดแล้วฉันจะไม่ต้องการเสื้อคลุม ตอนนี้มาดูคลาสของฉันLoggerที่ขึ้นอยู่กับZend_Mail: class Logger{ private $mailer; function __construct(Zend_Mail $mail){ $this->mail=$mail; } function toBeTestedFunction(){ //Some code $this->mail->setTo('some value'); $this->mail->setSubject('some value'); $this->mail->setBody('some value'); $this->mail->send(); //Some } } อย่างไรก็ตามการทดสอบหน่วยต้องการให้ฉันทดสอบองค์ประกอบหนึ่งครั้งดังนั้นฉันต้องจำลองZend_Mailชั้นเรียน นอกจากนี้ฉันกำลังละเมิดหลักการการพึ่งพาการพึ่งพาเนื่องจากLoggerชั้นเรียนของฉันตอนนี้ขึ้นอยู่กับการตัดสินใจที่ไม่เป็นนามธรรม ตอนนี้ฉันจะทดสอบLoggerการแยกโดยไม่ต้องห่อได้Zend_Mailอย่างไร! รหัสอยู่ใน PHP แต่คำตอบไม่จำเป็นต้องเป็น นี่เป็นปัญหาการออกแบบมากกว่าฟีเจอร์เฉพาะภาษา

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